나는이 문제에 대해 많은 질문과 대답을하고 있지만 이것이 실제로 나의 사건에 적용되는지는 모르겠다.JS setInterval() mem leak
나는 setInterval
기능을 가진 시간 스크립트가 있습니다. 처음 몇 분 동안은 제대로 작동하지만 크롬/오페라 작업 관리자에서이 스크립트가있는 탭이 40MB에서 2-3GB로 이동하는 것을 볼 수 있습니다! 그것은 미친 짓이고, 나는 그것을 고치는 법을 모른다. 다른 방법으로 모든 스크립트를 다시 작성하는 경우에만.
스크립트 : 당신은 재귀 적으로 반복이다 updateTime
를 호출 setInterval
를 사용하여 updateTime
함수를 호출하는
function checkTime(i) {
return (i < 10) ? "0" + i : i;
};
function calcTime(city, offset) {
d = new Date();
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
nd = new Date(utc + (3600000*offset)),
h = checkTime(nd.getHours()),
m = checkTime(nd.getMinutes()),
s = checkTime(nd.getSeconds());
return nd.toLocaleString();
};
function updateTime() {
if (document.getElementById('timeMoscow')) {
calcTime('Moscow', '+3');
document.getElementById('timeMoscow').innerHTML = h + ":" + m /*+ ":" + s*/;
}
if (document.getElementById('timeKiev')) {
calcTime('Kiev', '+2');
document.getElementById('timeKiev').innerHTML = h + ":" + m /*+ ":" + s*/;
} else
if (document.getElementById('timeAstana')) {
calcTime('Astana', '+6');
document.getElementById('timeAstana').innerHTML = h + ":" + m /*+ ":" + s*/;
}
if (document.getElementById('timeNewYork')) {
calcTime('NewYork', '-4');
document.getElementById('timeNewYork').innerHTML = h + ":" + m /*+ ":" + s*/;
}
setInterval(updateTime, 500); //Problem
}
updateTime();
stackoverflow 참조 : – abhishekkannojia
'setInterval'이 자동으로 반복되므로 다시 호출 할 필요가 없습니다. 당신은'setTimeout'과 혼동하고 있습니다. – JJJ
그럼 재귀 적으로 다시 interval을 설정하고, 다시 updateTime을 호출하여 interval을 다시 설정하여 updateTime을 호출하면 메모리가 부족해질 때까지 반복적으로 발생합니다. – abhishekkannojia