2013-01-16 113 views
2

如果將事件偵聽器附加到表的特定列中的每個單元格,然後將每一行從表中刪除,爲避免內存泄漏,開發人員需要刪除該事件 - 行被刪除之前的聽衆,還是瀏覽器清理乾淨?DOM事件偵聽器垃圾回收

編輯:邁克爾建議說的文章event delegation比監聽器直接綁定到表中的每個單元格執行得更好,但我不確定從垃圾收集角度來看它是更好還是隻是表現更好。請給出意見。從文章:

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

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

     }); 

據說是優於:

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

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

     }); 

EDIT2:和jQuery documentation of .on() and event delegation還側重於性能,但是從當行是一個垃圾收集的角度發生了什麼問題從大表中反覆刪除整體,並且委託機制正在監聽單元格單擊,並保留。

+1

對此 https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Management看看 它可能是有益 –

回答

0

我並不確切地知道,但我認爲瀏覽器(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 

也有一些機構提供了明確的清除它,所以,搜索並會有很多相關的問題

但我再次不確定!所以要等專家拿出堅實的答案

+0

感謝第一個Mozilla鏈接和這個概述;我編輯了我的原始問題,特別強調了潛在成千上萬個單元可能讓監聽器監聽點擊事件的問題;我的表是定期(比如每30秒)通過ajax XHR刷新實時數據,導致刪除所有以前的行。 – Tim