Я использую следующий код в одной из моих программ. Он предоставляет сервер-push для HTML-интерфейса.Является ли этот код JavaScript причиной утечек памяти?
Все работает так, как ожидалось, но после некоторого времени работы (несколько дней) браузер ест всю память и компьютер зависает и ее необходимо перезапустить.
Возможно ли, что мой код утечки памяти, или проблема в браузере? Я знаю, что это возможно плохой код JavaScript утечка памяти в некоторых случаях и до тех пор, как мои навыки JS близки к нулю ...
сам код:
var keepAliveTimer = null;
function gotActivity() {
if (keepAliveTimer != null) clearTimeout(keepAliveTimer);
keepAliveTimer = setTimeout(connect, 3000);
}
function connect(){
gotActivity();
var source = new EventSource('/Events?');
source.onmessage =
function (event) {
var N = event.data.split("=");
var K=N.shift();
var H = "";
for (var i=0; i<N.length; i++) {
if (i>0) {H += "="};
H += N[i];
};
var el = document.getElementById(K);
if (el.hasAttribute("value")) {
el.value = H;
} else {
el.innerHTML = H;
};
};
};
connect();
Это держать-живой таймер механизм был предложен в this answer.
EDIT1: снова считывает источник. Когда будет создан объект EventSource
? По моему мнению, выход из connect()
изменен в переменной source
, и объект EventSource остается навсегда. Следующий вызов connect()
просто создаст другой такой объект, не разрушив старый. Я прав?