Skip to content

Latest commit

 

History

History
55 lines (38 loc) · 3.96 KB

MEMORYLEAKS.md

File metadata and controls

55 lines (38 loc) · 3.96 KB

Утечки памяти в проекте 📝


Бесконечные платформы 🚀

Как появилась:

Данная утечка памяти появилась на этапе добавления платформ в игру. Идея состояла в том, что бы добавлять новые платформы по мере продвижения персонажа вверх.

Причина:

Платформы создавались при отрисовке платформ, что порождало бесконечный цикл. В результате количество платформ за несколько секунд игры увеличивалось до размера 15000 - 20000 элементов.

Было:

Screenshot from 2023-04-12 09-59-37

Решение:

Создаем массив с платформами

Screenshot from 2023-04-12 09-59-07

Пушим в массив новые платформы только тогда, когда их нужно подрузить.

Screenshot from 2023-04-12 09-59-19


Бесконечная игра 🔥🔥

Как появилась:

Игра заканчивается, если игрок упал с платформы. В этот момент появляется модальное окно с результатом и кнопка "Начать игру заново".

Причина:

Фактически, после завершения, игра продолжала работать в фоне. Метод requestAnimationFrame заметно нагружал процессор, что сказывалось на производительности компьютера. Незначительное количество перезапусков игры или наличие 3-4 открытых вкладок с игрой существенно снижало работу браузера.

Было:

У requestAnimationFrame не был предусмотрен способ для его остановки и очистки.

Screenshot from 2023-04-12 08-55-19

Решение:

Добавили переменную для хранения состояния

Screenshot from 2023-04-12 09-40-03

Передаем возвращаемое значение из requestAnimationFrame

Screenshot from 2023-04-12 09-38-56

Когда игра заканчивается, останавливаем requestAnimationFrame через cancelAnimationFrame. Очищаем переменную frameId.

Screenshot from 2023-04-12 09-38-47

Screenshot from 2023-04-12 09-38-26


Это все? ✨

На момент начала 9 спринта в проекте нет утечек памяти, которые могут влиять на пользовательский опыт. Для выявления менее значительных утечек необходимо длительное тестирование. Возможно появление крайне специфичных утечек при определенных действиях пользователя.