ブラウザで一度に複数の日数の間開いている単一ページアプリケーションを作成しています。このページでは、右上にタイマーを表示しています。私はしかし、私はタイマーを使用している方法は、少量のメモリを漏れていることがわかりました。jQuery.text()を使用するとメモリリークが発生する
https://jsfiddle.net/zbgonp84/
$(function(){
timer();
});
function timer(){
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
$("#timer").text(h + ":" + m + ":" + s);
var t = setTimeout(timer, 1000);
}
function checkTime(i) {
if (i < 10){
i = "0" + i;
}
return i;
}
私はちょうどタイマーとフィドルのタイマのdiv要素を再現しています。 chromeの開発ツールを開いてタイムラインを記録すると、毎秒新しいノードがメモリに追加されることがわかります。 24時間放置すると、毎日新しいノードが追加され、収集されることはありません。
これはガベージコレクトされていない理由がかなり分かりませんが、メモリの割り当てを解除するにはどうすればよいですか?
の変数
t
外を宣言あなたはsetTimeout' 'の' timer'参照および使用を参照していますか?期待される結果は何ですか?また、 'timer'を呼び出すたびに' jQuery() 'を呼び出しています。 – guest271314ガベージコレクタはどのように接続されていますか?どのようなゴミを収集する必要がありますか? –
あなたは '.text()'を変更する前に '.empty()'を呼び出そうとしましたか? – Steve