私の質問は、「長時間」表示されるWebページを作成していることを前提としています。このようなシナリオでJQuery/JavaScriptを使用すると、メモリリークが発生する一般的な落とし穴は何ですか?たとえば$.remove()
、要素のコレクションを呼び出すと、メモリに関して何が起こりますか?ありがとう!
質問する
695 次
1 に答える
1
JavaScriptは、ガベージコレクションを使用して、使用されなくなった文字列、オブジェクト、配列、および関数によって占有されているメモリを再利用します。これにより、プログラマーはメモリの割り当てを明示的に解除する必要がなくなり、JavaScriptプログラミングをCプログラミングよりも簡単にする重要な部分になります。
参考資料: SOに関する詳細と回答については、これを確認してください。
イベント登録メカニズムMDNのメモリの問題
var i;
var els = document.getElementsByTagName('*');
// Case 1
for(i=0 ; i<els.length ; i++){
els[i].addEventListener("click", function(e){/*do something*/}, false});
}
// Case 2
function processEvent(e){
/*do something*/
}
for(i=0 ; i<els.length ; i++){
els[i].addEventListener("click", processEvent, false});
}
最初のケースでは、ループターンごとに新しい(匿名)関数が作成されます。2番目のケースでは、以前に宣言された同じ関数がイベントハンドラーとして使用されます。これにより、メモリ消費量が少なくなります。さらに、前者の場合、無名関数への参照が保持されていないため、ハンドラーへの参照がないため、element.removeEventListenerを呼び出すことはできませんが、後者の場合は、
myElement.removeEventListener("click", processEvent, false)
于 2012-04-25T14:54:37.180 に答える