Большинство непредсказуемых сбоев в Javascript вызваны утечками памяти - объектами, которые все еще хранятся в памяти и не собираются сборщиком мусора. Каждый объект в Javascript хранится в переменной где-то в пределах глобальной области видимости или связан с другим объектом, который сам связан с глобальной областью видимости. Когда «ветвь» «дерева» удаляется и глобальный охват больше не доступен, сборщик мусора уничтожает ее.
Однако, если объект не удаляется из глобальной области видимости, когда он должен быть, он остается в памяти. Это обычно происходит, когда объекты добавляются в массив, но не удаляются из этого массива, когда они больше не используются. Со временем эти объекты накапливаются до тех пор, пока не произойдет сбой процесса из-за перегрузки памяти.
Чтобы найти утечки памяти в Chrome, нажмите F12 и откройте вкладку «Производительность». Записывая страницу с течением времени, вы можете просмотреть объем используемой памяти. Зеленая линия (узлы) здесь самая важная - она относится к количеству объектов в памяти. Если узлы постоянно увеличиваются с течением времени (всегда будут увеличиваться и уменьшаться, но если общий уровень постоянно растет), это обычно означает утечку памяти.
Чтобы определить, какие именно объекты вызывают проблему, откройте вкладку «Память», чтобы сделать снимки или профили временной шкалы кучи памяти. Это дает вам счет конкретных объектов, которые находятся в памяти в любой момент времени. Если какого-то объекта больше, чем должно быть, вот где утечка.