Короче, сижу, пилю свою игруху. Решил сделать простую фичу — лог событий. Ну, типа, чтобы в углу экрана писалось: «вы нашли меч», «монстр вас ударил», «вы выпили зелье». Просто, как три копейки.
И тут мой мозг гения (нет) выдает: А ДАВАЙ СДЕЛАЕМ СЛОЖНО.
Зачем просто добавлять строчку текста? Нееет. Я, крч, замутил какую-то дикую систему, где каждое событие — это отдельный объект со своим ID, временем, типом и еще кучей всякой фигни. Чтобы потом можно было фильтровать красиво. Ну, вы поняли, оверинжиниринг во всей красе.
Сделал. Вроде работает. Радуюсь, какой я умный.
Проходит день. Я добавляю еще всякого в игру и тут замечаю — она подтормаживает. Текстовая, бл*ть, игра. Начинает лагать после нескольких действий. Думаю, чё за фигня? У меня тут не киберпанк, а буквы на экране.
Я часа три, наверное, убил на это. Три. Часа.
Перерыл всё. Думал, уже нейронка-рассказчик тупит. Потом грешил на хостинг, думал, пинг скачет. Полез в код сетевых запросов. Ничего. Всё чисто.
Сижу злой, уже всё бесит. Кот пришел, трётся об ногу, а я его даже не замечаю. В голове только одна мысль: ГДЕ. ОНО. ТОРМОЗИТ.
И вот когда я уже почти сдался и решил, что ноут проклят, я случайно открываю тот самый файл с моим гениальным логом. И до меня доходит.
Оказалось, мой код каждый раз, когда в игре что-то происходило, не просто добавлял новую запись. Он, короче, брал ВЕСЬ старый лог на несколько сотен записей, полностью его читал, добавлял в конец одну новую строчку и потом весь этот массив записывал обратно в файл. Полностью. На каждом чихе.
То есть чем дольше играешь — тем больше файл, и тем сильнее лаг при каждом действии.
Полдня. Я искал баг, который чинится изменением одной команды с "перезаписать файл" на "добавить строчку в конец".
Сидел потом и думал, какой же я баклан.
P.S. Теперь игра вроде не лагает (наверное). Можете зайти проверить по ссылке в шапке профиля. Если найдете еще какой-нибудь мой тупой косяк — пишите, я не обижусь. Уже привык.