0

私はいくつかの調査を行いました ( JavaScript クロージャーとメモリの問題) が、JS クロージャーとそれがメモリ リークにどのように影響するかを完全には理解していません。この質問をして理解を深めようとしているので、さらに調査を行っていますが、誰かがこれを見て問題を診断できるかどうかを確認したいと思いました。

Web サイトで jQuery を使用して、テーブル内のデータを更新しています。使用しているうちにゆっくりとメモリに忍び寄りますが、最大の問題は、ユーザーがページを更新すると、最大 3MB ジャンプすることです。ブラウザで他のタブを開くと同様の問題が発生し、数時間使用すると 200MB のメモリが使用される可能性があります。私の読書を通して、私は問題を自分のコードの閉鎖の問題に絞り込んだと思います。ほとんどの作業を行う主要な部分は次のとおりです。

$(document).ready(function(){
setDateSelect();
var url_fm_smry=url_fm_smry_base + url_fm_currdate2 + url_region;
$.getJSON(url_fm_smry,function(data)
{
    $('#summaryContainer').empty();
    $('#summaryTblTmpl')                 // Select the template.
    .tmpl(data.d.results)               // Bind it to the data.
    .appendTo('#summaryContainer');     // Render the output.
});

$.getJSON(url_fm_meta + url_region,function(data)
{
    $('#runDTM').empty();
    $('#runDTMTmpl')                     // Select the template.
    .tmpl(data.d.results)               // Bind it to the data.
    .appendTo('#runDTM');               // Render the output.
});

setInterval(summaryCall,5000);});

setDateSelect今日の日付に基づいた可変日付のドロップダウン メニューをロードします。

url_fm_smryは、他の関数がアクセスする必要がある 3 つのグローバル変数で構成されるローカル変数です。

summaryCall上記とまったく同じことを 5 秒ごとに繰り返して、新しいデータ ストリームでテーブルを更新するだけです。

提案と助けをありがとう。

4

1 に答える 1

0

内部的には、getJSONはこれを行います。

getJSON: function( url, data, callback ) { 
    return jQuery.get( url, data, callback, "json" );
}

この行にブレークポイントを設定し、Function スコープを表示します。少なくともあります:

  1. jQuery
  2. jQuery.getJSON コールバック
  3. jQuery.get 内部呼び出し
  4. jQuery.get 内部コールバック

jQuery.getクロージャー スコープを回避するには、無名関数ではなく名前付き関数を使用して直接呼び出します。

参考文献

于 2013-10-09T23:07:52.267 に答える