この問題についてはここで質問と回答がたくさんあることはわかっていますが、それが本当に鉱山のケースに当てはまるかどうかはわかりません。JS setInterval()mem leak
私はsetInterval
の機能を持つタイムスクリプトを持っています。最初の分はうまくいきますが、クロム/オペラタスクマネージャーでは、このスクリプトのタブが40MBから2GBに移動しています。それは狂気だし、私はそれを修正する方法を知らない。すべてのスクリプトを別の方法で書き直す場合のみ。
スクリプト:あなたが再帰的に繰り返している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'を呼び出します。これは' updateTime'を呼び出すIntervalを再び設定し、メモリが足りなくなるまで何度も繰り返されます。 – abhishekkannojia