6

AJAX 呼び出しを使用してサーバーから JSON オブジェクトを繰り返しフェッチしています。時間の経過とともに、ブラウザーのメモリ使用量が増加します (Chrome、Safari、Firefox で試行)。Chrome のヒープ スナップショットを使用して、タイムスタンプ文字列が参照なしで残っていることを発見しました。一連のスナップショットを取得すると、文字列の数が増え続けていることがわかります。

$(function() {
    var latestTimestamp = 0;

    function fetchData() {
        $.get("/parameter?format=json&since=" + latestTimestamp, gotData)
    }   

    function gotData(data) {
        latestTimestamp = data['timestamp'];
        setTimeout(fetchData, 250);
    }   

    fetchData();
});

その他の注意事項:

  • jQuery 1.7.1 を使用しています。編集: 1.6.2 と 1.4.2 で試したところ、同じ問題が発生しました。
  • JSON オブジェクトのtimestampは、実際には文字列ではなく整数です。では、蓄積された文字列は一時的な値である可能性がありますか?
  • AJAX リクエストから を削除+ latestTimestampすると、リークが停止します。
  • setTimeout (20ms) を速くすると、リークが速くなります。速いタイムアウトが原因かもしれないと思ったので、250ms に減らしましたが、それは役に立ちませんでした。
4

3 に答える 3

1

cleartimeout JavaScript 関数を試しましたか? そうでない場合は、これを試してください。

var abc=null;
function gotData(data) {
latestTimestamp = data['timestamp'];
data=null;
clearTimeout(abc);
abc=setTimeout(fetchData, 250);
}
于 2012-04-30T11:50:38.237 に答える
0

data[] を使い終わったら、それを取り除くことができます:

function gotData(data) {
    latestTimestamp = data['timestamp'];
    delete data;
    setTimeout(fetchData, 250);
} 
于 2012-04-12T15:47:35.387 に答える