5

イベントリスナーがテーブルの特定の列のすべてのセルにアタッチされ、次にすべての行がテーブルから削除される場合、メモリリークを回避するために、開発者は行が削除される前にイベントリスナーを削除する必要があります。ブラウザは物事をクリーンアップしますか?

編集:マイケルが提案した記事はevent delegation、リスナーをテーブル内のすべてのセルに直接バインドするよりもパフォーマンスが優れていると述べていますが、ガベージコレクションの観点から優れているのか、それとも単にパフォーマンスが優れているのかはわかりません。コメントしてください。記事から:

        $('table').on('click', 'td', function () {

            $(this).toggleClass('active');

        });

以下より優れていると言われています:

        $('table td').on('click', function () {

            $(this).toggleClass('active');

        });

Edit2:および.on()とイベント委任のjQueryドキュメントもパフォーマンスに焦点を当てていますが、大きなテーブルから行が大量に繰り返し削除され、セルクリックが行われている場合、ガベージコレクションの観点から何が起こるかという問題があります。委任されたメカニズムによってリッスンされたままです。

4

2 に答える 2

1

正確にはわかりませんが、ブラウザ(JavaScriptエンジン)がガベージコレクションを担当していると思います。

私が知っているように、このメカニズムは新世代のブラウザでは自動的に行われます

だから、流れはこんな感じになります、

1. you create cells
2. you attach listeners
3. memory allocated
4. you remove cells
5. listeners becomes dangling
6. Garbage collector clears it
7. you are happy

また、それを明示的にクリアするために提供されるいくつかのメカニズムがあり、それをSOで検索すると、それに関連する多くの質問があります

しかし、もう一度わかりません!専門家が確かな答えを出すのを待ってください

于 2013-01-16T14:11:34.147 に答える
-2

よくわかりませんが、このすばらしい記事で問題が解決すると思います(「ガベージコレクション」を検索してください):http ://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/

于 2013-01-16T14:03:38.787 に答える