Я пытаюсь понять, как предотвратить утечки памяти при использовании таймеров.Я полагаю, что график памяти на вкладке «Быстродействие инструментов разработчика Chrome» (я все еще изучаю эту функцию) показывает плохую схему управления памятью.Я считаю, что это случай «пилообразного» паттерна при каждом срабатывании таймера.
У меня есть простой тестовый случай (1. щелкните правой кнопкой мыши «timer-adder.html»,2. нажмите «Предварительный просмотр», чтобы получить предварительный просмотр загруженного HTML-кода), что включает использование функции конструктора для создания объектов, которые работают как таймеры, другими словами, для каждого обновления DOM изменяется внутри обратного вызова setInterval
.
//...
start: function (initialTime, prefixedId) {
let $display = document.getElementById(prefixedId + '-display');
if ($display.style.display === 'none') { $display.style.display = 'block'; }
$display.textContent = TimerHandler.cycle(initialTime);
$display = null;
return setInterval(function () {
this.initialTime--;
(this.initialTime === 0 && this.pause());
document.getElementById(prefixedId + '-display').textContent = TimerHandler.cycle(this.initialTime);
}.bind(this), 1000);
},
/...
Попытки минимизировать утечку, хотя это не имеет прямого отношения к тому, что я считаю проблемой:
- назначение
$display
для null
, чтобы сделать его коллекционным (сборщик мусора). - очистка интервала;
То, что я считаю плохим шаблоном: Просмотр сообщения на imgur.com (с возможностью масштабирования)
Добросовестное использование памяти означало бы, что DevTools показывает горизонтальную линию?Каков был бы более безопасный подход к этому побочному эффекту?Потому что, поскольку тестирование проводится прямо сейчас, я думаю, что в долгосрочной перспективе несколько активных таймеров перегрузят память и, следовательно, приведут к заметному снижению производительности.
PS: Как новичок, я надеюсь, что эточестное изложение проблемы.Спасибо.