DOM事件监听器垃圾回收

5
如果在表的特定列中附加了事件侦听器,并且随后每一行都从表中删除,为避免内存泄漏,开发人员是否需要在删除行之前删除事件侦听器,或者浏览器会自动清理?编辑:Michael建议的文章说,事件委托比直接绑定到表中的每个单元格更好,但我不确定它从垃圾收集角度是否更好,还是仅执行得更好。请评论。来自文章:
        $('table').on('click', 'td', function () {

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

        });

据说比以下内容更好:
        $('table td').on('click', function () {

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

        });

编辑2:并且jQuery的.on()和事件委托文档也关注于性能,但当从大表中反复大量删除行时,委派机制正在监听单元格点击时从垃圾收集角度看会发生什么,这个问题仍然存在。

1
看一下这个链接:https://developer.mozilla.org/zh-CN/docs/JavaScript/Memory_Management可能会有帮助。 - Saurabh Bayani
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上搜索相关问题,会有很多相关的问题。

但是我仍然不确定!所以请等待专家提供可靠的答案。


感谢第一个Mozilla链接和这个概述;我已经编辑了我的原始问题,以特别强调可能有成千上万个单元格需要监听它们的点击事件的问题;我的表格每隔30秒通过ajax XHR实时数据进行周期性刷新,导致删除所有先前的行。 - Tim

-2

3
因为答案没有包含任何实际信息,只是指向一个资源(该资源在未来某个时候可能会变得过时,从而完全使答案无效),所以被投了反对票。一种纠正这个问题的方法是,保留指向好文章的链接,同时在答案中用项目符号列出文章中的主要观点或合成观点。请注意,不要改变原来的意思。 - Armen Michaeli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接