$.cache
額面のサイズはメモリリークについては何も教えていません。それは非常に小さく、まだメモリリークがあるか、または非常に大きく、メモリリークがない可能性があります。
ページでjQueryにバインドされているイベントリスナーが10人あり、さらに多くのエントリがある場合は、$.cache
にリークしていることがわかります。
大きなメモリセーバーは、個々の要素にイベントリスナーをアタッチするのではなく、イベントデリゲーションを使用することです。
セイ:
<ul>
<li></li>
<li></li>
<li></li>
</ul>
$("li").on("click", fn)
(あなたがより多くの李さんはもちろんを持っている場合は、より多くの)$("ul").on("click", "li", fn)
は関係なく、あなたが持っていると、まだ持っているどのように多くの李要素の一つだけを添付してしまうのに対し、3つの個々のイベントハンドラを添付します同じ結果。漏れの
例:
$("button").click(function() {
$("#target")[0].innerHTML = "";
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/1/
理由.innerHTMLは、それがクリーンアップできないようにjQueryの一部がされていない、使用されていることです。
修正は同じのためのjQueryのメソッドを使用することです:
$("button").click(function() {
$("#target").html("");
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/2/
それは、それがどのように大規模ではないのですが、それは時間をかけて成長しますか。キャッシュが制限されていない(つまり、永遠に増加する)場合、メモリリークが発生している可能性があります。 –
jQueryは真にブラウザ互換です。すべてのブラウザに要素を適切に処理するというIEの問題を引き起こします。 –
あなたが合理的であれば、現代の記憶能力に負担をかけるのは難しいでしょう。もちろん、十分な大きさのメモリリークを作成しない限り。メモリの魔法の量はありません、それはすべてユーザーのハードウェアに依存します。 90年代のコンピュータを使っている人は気になりますか? –