Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Утечка памяти в приложении javascript (https://javascript.ru/forum/misc/74271-utechka-pamyati-v-prilozhenii-javascript.html)

staircaseMaker 26.06.2018 11:21

Утечка памяти в приложении javascript
 
Здравствуйте, коллеги!
Подскажите, пожалуйста, как решить проблему с утечкой памяти. Суть проблемы следующая: есть приложение, написанное на js с использованием библиотеки THREE.js, которое строит 3D модель и выводит ее на страницу. После каждого обновления модели, вкладка браузера требует все больше памяти. После 50-100 обновлений память заканчивается и браузер виснет. Вот скриншот консоли http://joxi.ru/Dr8v4KRI4xLd12 Первый снимок до обновления модели, второй - после. Там появляются какие-то массивы, хотя у меня в коде массивов-то и нет: там все объекты. С DOM работы особо никакой не производится, все глобальные переменные перед обновлением модели затираются.
Подскажите, как найти в коде тот объект, который эти проблемы создает?
Как вообще решаются такие проблемы? Какая нужна дополнительная информация чтобы можно было понять, в чем проблема?

Alexandroppolus 26.06.2018 11:40

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

staircaseMaker 26.06.2018 11:56

Цитата:

Сообщение от Alexandroppolus (Сообщение 488385)
наиболее частый кейс - в каждой итерации происходит подписка на событие, а отписка потом не делается. В итоге функции-обработчики события остаются в памяти, и держат в замыканиях объекты.

В явном виде у меня нигде не назначаются обработчики. Можно ли как-то проверить, не происходит ли это каким-то неявным образом?

Alexandroppolus 26.06.2018 12:18

Цитата:

Сообщение от staircaseMaker
Можно ли как-то проверить, не происходит ли это каким-то неявным образом?

дебажить, пока голова не отвалится.
console.log понавтыкать, брекпоинтов наставить, в общем, увидеть пошагово, что происходит.

иногда помогает способ выявления проблемного кода методом "деления пополам" - просто тупо выкидываешь половину логики, смотришь осталась проблема или нет, и соответственно в какой половине косяк.

staircaseMaker 05.07.2018 10:13

Коллеги, кто-нибудь может за деньги решить мою проблему?

Nexus 05.07.2018 10:16

staircaseMaker, создайте тему в разделе форума "работа".

рони 05.07.2018 10:30

Цитата:

Сообщение от staircaseMaker
Коллеги, кто-нибудь может за деньги решить мою проблему?

ищите форумы по THREE.js

staircaseMaker 06.07.2018 19:19

Коллеги, всем спасибо, проблему решили. Если кому-то будет интересно, то проблема была решена таким образом: после удаления объектов из сцены при обновлении модели дополнительно вызывается метод dispose для геометрии и материала для каждого объекта


Часовой пояс GMT +3, время: 08:53.