私の質問は、あなたが「長い間」表示されるウェブページを作成していることを前提としています。私はこのようなシナリオでJQuery/JavaScriptを使用する際にメモリリークを引き起こす一般的な問題点について何か不思議です。たとえば、要素のコレクションで$.remove()
に電話すると、メモリの点でどうなるでしょうか?ありがとう!JQuery/JavaScriptを使用してメモリリークを引き起こす一般的な方法は何ですか?
7
A
答えて
1
JavaScriptはガベージコレクションを使用して、使用していない文字列、オブジェクト、配列、および関数が占有するメモリを再利用します。 これによりプログラマは、自分自身でメモリを明示的に割り当て解除する必要がなくなり、JavaScriptプログラミングよりも簡単にプログラミングできるようになりました。
参考文献:Check this for moreとan answer on 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});
}
を登録する場合に
メモリの問題は、新しい(匿名)関数は、各ループの変わり目に作成されます。後者の場合、以前に宣言された同じ関数がイベントハンドラとして使用されます。これにより、メモリ消費量が少なくなります。さらに、最初のケースでは、匿名関数への参照が保持されないため、ハンドラへの参照がないためelement.removeEventListenerを呼び出すことはできません。
myElement.removeEventListener("click", processEvent, false)
関連する問題
- 1. StackOverflowErrorを引き起こす一般的なQuickSort
- 2. TypeScript 2.4コンパイルエラーを引き起こす一般的な推論
- 3. これはリンクリストを使用してメモリリークを引き起こしますか?
- 4. 使用して一般的な方法
- 5. なぜこのコードはメモリリークを引き起こしますか?
- 6. なぜこのゴランプログラムはメモリリークを引き起こしますか?
- 7. Twisted:connectProtocolを使用してエンドポイントにメモリリークを引き起こしますか?
- 8. 一般的な目的として使用するMIMEタイプは何ですか?
- 9. 新しいものを使用する以外にメモリリークを引き起こす原因は何ですか? (C++)
- 10. このコードはメモリリークを引き起こしますか?
- 11. この参照はメモリリークを引き起こしますか?
- 12. このコードブロックはメモリリークを引き起こしますか?
- 13. このjQueryコードスニペットはメモリリークを引き起こしますか?
- 14. これはメモリリークを引き起こしますか?
- 15. Python - なぜtime.sleepがメモリリークを引き起こすのですか?
- 16. Javaでメモリリークを引き起こす最も簡単な方法は?
- 17. ベクトルポインタvalgrindメモリリークを引き起こす
- 18. Akka Microkernelの一般的な使用例は何ですか?
- 19. サブクラスがメモリリークを引き起こしていますか?
- 20. どのような種類のオブジェクトがメモリリークを引き起こしているのか、今は何ですか?
- 21. Application.terminateはメモリリークを引き起こしますか?
- 22. stringはメモリリークを引き起こしますか?
- 23. OpenGL glDeleteTexturesはメモリリークを引き起こしますか?
- 24. エンティティマネージャはメモリリークを引き起こしますか?
- 25. ExecutorService.newFixedThreadPool.submit(new class())はメモリリークを引き起こしますか?
- 26. Grails warはTomcatのメモリリークを引き起こしますか?
- 27. QProcess :: startDetached()はメモリリークを引き起こしますか?
- 28. Reduxストアはメモリリークを引き起こしますか?
- 29. `goto LABEL`はメモリリークを引き起こしますか?
- 30. スマート引用符が間違ってエンコードされる一般的な方法は何ですか?
どちらの場合も、btwを吸うと、イベントバブリングを使用できるときにすべての要素にイベントを登録しています。 –