Данная утечка памяти появилась на этапе добавления платформ в игру. Идея состояла в том, что бы добавлять новые платформы по мере продвижения персонажа вверх.
Платформы создавались при отрисовке платформ, что порождало бесконечный цикл. В результате количество платформ за несколько секунд игры увеличивалось до размера 15000 - 20000 элементов.
Создаем массив с платформами
Пушим в массив новые платформы только тогда, когда их нужно подрузить.
Игра заканчивается, если игрок упал с платформы. В этот момент появляется модальное окно с результатом и кнопка "Начать игру заново".
Фактически, после завершения, игра продолжала работать в фоне. Метод requestAnimationFrame заметно нагружал процессор, что сказывалось на производительности компьютера. Незначительное количество перезапусков игры или наличие 3-4 открытых вкладок с игрой существенно снижало работу браузера.
У requestAnimationFrame не был предусмотрен способ для его остановки и очистки.
Добавили переменную для хранения состояния
Передаем возвращаемое значение из requestAnimationFrame
Когда игра заканчивается, останавливаем requestAnimationFrame через cancelAnimationFrame. Очищаем переменную frameId.
На момент начала 9 спринта в проекте нет утечек памяти, которые могут влиять на пользовательский опыт. Для выявления менее значительных утечек необходимо длительное тестирование. Возможно появление крайне специфичных утечек при определенных действиях пользователя.