2011-01-24 20 views
1

私は最近Javascriptで作業していますが、実際にはそれほど堪能ではありません。メモリ使用量が着実に増加しているように見えるので、私はメモリリークと思われるものを追跡しようとしています。これを引き起こしている可能性があるために私が持っている1つのアイデアは、内部関数の使用です。私はXMLHTTPRequests(および他の関連オブジェクト)を扱うときに内部関数を使用し、これらの要求は数秒ごとに作成されます。私はおそらく私はそれを適切に閉じていないと感じる。だから、もしこれが問題であると誰かが私に教えてくれれば、内的関数の1つのためのコードがあります。 (これはIEの文脈の中で、わかりませんし、他のブラウザで起こっているかどうかもわかりません)。Javascript内部関数のメモリリーク?

me.request.open("GET", url, true); 
    me.request.onreadystatechange = onReadyStateChange; 
    me.request.send(); 

    function onReadyStateChange() { 
     if (4 == me.request.readyState) { 
      if (me.request.status == 200) { 
       var results = me.request.responseText; 
       var resultsString = me.request.responseText.toString(); 
       me.stringOperation(resultsString); 
       me.request.abort(); 
       me.request = null; 
      } else { 
       me.request.abort(); 
       me.request = null; 
      } 
     } 
    } 

答えて

1

me.request = null後、me.request.onreadystatechange = nooponReadyStateChange

function noop() {} 

そしてを追加します。

これにより、meonReadyStateChangeの間の循環参照がJSオブジェクト/ホストオブジェクトバリアを横切るようになります。

+0

me.onreadystatechangeをnullに変更しても問題ありませんか? – user535617

+0

しかし... XMLHttpRequestオブジェクトは本当にDOMのことではありませんか?それとも、IEには実際のDOM要素と同じ問題があると言っていますか? (私は無知から尋ねます) – Pointy

+0

@Pointy彼はたぶんJSオブジェクト(組み込みオブジェクト)/ブラウザオブジェクト(ホストオブジェクト)を意味していました。一部の人は、すべてのホストオブジェクトをDOMオブジェクトとして参照します。 (ブラウザ環境では少なくとも) –

関連する問題