私はjavascriptを初めて使い、メモリリークを追跡するのに少し問題があるようです。私は、コードがかなり複雑であるため、メモリリークの原因と思われるセクションに絞り込んだ。私はそれを単純化するが、同じ問題(ちょっとだけ小さい)を引き起こす別の例を投稿します。現在のブラウザでクロージャと(jQuery)DOMイベントのメモリリークが発生しましたか?
基本的に、私は動的にHTMLを構築し、HTMLにイベントをアタッチいくつかのコードを持っています。 HTMLはすべてのAJAXリクエストで再構築されます。これはすべてうまく動作し、初心者ですが、各AJAXリクエストの後にブラウザのメモリが上昇します(必ずしも等しいとは限りません)!この問題は、jsfiddleで複数回実行をクリックし、ブラウザのメモリを見て再現することができます。私の前提は、作成されるクロージャーは決してガベージコレクションされませんが、わかりません。それが問題ではない閉鎖なしでこれを行うより良い方法があるのならば?
これは、FF8、Chromeの最新バージョン、およびIE 8で発生します。ほとんどの場合、他のすべての可能性があります。
コードにいくつかコメントを入れておきます。
ありがとうございます!
EDIT: [OK]を、篩を用いていくつかのより多くの研究を行った後、私は、DOMの数のノードは、すべてのAJAX呼び出しで倍増していることを確認できるように。これをシミュレートするサンプルを更新しました。だから私の質問はなぜjQueryを空にしたり関数を削除した後にDOM要素がガベージコレクションされないのですか?私も...イベントハンドラのバインドを解除し、影響を与えずにnullに各DOM要素jsの参照を設定するもので要素を
IE6などでいくつかのHTML/DOM-JSメモリの問題がありました(DOMに1つのメモリモデルがあり、JSエンジンが別のものを持っていて2つの間で解決しようとしていました)。現代のブラウザーに現在の "落書き"があるかどうかは分かりません。 –
最新のChromeでこれを再現することはできません:/ –
Chromeの「最新バージョン」は常に同じとは限りません。また、使用するjQueryのバージョンも指定します。 :) [旧バージョンのjQueryにはイベントによるメモリリークがありました。](http://bugs.jquery.com/ticket/5285) –