У меня довольно сложное приложение Javascript, у которого есть основной цикл, который называется 60 раз в секунду. Кажется, что происходит сбор мусора (основанный на "пилообразном" выходе из временной шкалы памяти в инструментах Chrome dev), и это часто влияет на производительность приложения.
Итак, я пытаюсь исследовать лучшие практики для сокращения объема работы, которую должен сделать сборщик мусора. (Большая часть информации, которую я смог найти в Интернете, что позволяет избежать утечек памяти, что представляет собой немного другой вопрос - моя память освобождается, просто потому, что происходит слишком много сборок мусора.) Я предполагаю что это в основном сводится к повторному использованию объектов как можно больше, но, конечно, дьявол находится в деталях.
Приложение структурировано в 'классах' в соответствии с John Resig Простым наследованием JavaScript.
Я думаю, что одна проблема заключается в том, что некоторые функции можно назвать тысячи раз в секунду (поскольку они используются сотни раз в течение каждой итерации основного цикла) и, возможно, локальные рабочие переменные в этих функциях (строки, массивы, и т.д.) может быть проблемой.
Я знаю об объединении объектов для более крупных/тяжелых объектов (и мы это в некоторой степени), но я ищу методы, которые можно применять по всем направлениям, особенно связанные с функциями, которые называются очень много раз в плотных петлях.
Какие методы я могу использовать для уменьшения объема работы, которую должен делать сборщик мусора?
И, возможно, также - какие методы можно использовать для определения того, какие объекты больше всего собирают мусор? (Это очень большая база кода, поэтому сравнение снимков кучи не очень плодотворно)