DOM事件监听器垃圾收集

时间:2013-01-16 13:51:32

标签: dom garbage-collection event-listener

如果事件侦听器附加到表的特定列中的每个单元格,然后从表中删除每一行,为了避免内存泄漏,开发人员必须在行之前删除事件侦听器删除,或浏览器清理?

编辑:Michael建议说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也关注性能,但是当从大型表中反复删除行 en masse 时,从垃圾收集角度看会发生什么的问题,以及正在由委派机制监听单元格单击,仍为。

2 个答案:

答案 0 :(得分:2)

我不确定,但我想这篇精彩的文章会清理一下(搜索“垃圾收集”):http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/

答案 1 :(得分: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

还有一些机制可以明确地清除它,为此搜索SO并且会有很多与此相关的问题

但我不确定!所以等待专家拿出坚实的答案