5

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

编辑:Michael 建议的文章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 回答