向$(document)附加大量事件处理程序是不好的吗?

3
我有一个非常动态的网络应用程序,元素不断地被创建和销毁。
为了使点击和其他事件保持有效,我将所有这些事件附加到$(document),例如以下示例:
 $(document).on('click', '.tabs li a', function(event) {

 });

像我说的那样,几乎所有这些事件都与$(document)有关,这样做有什么缺点吗?这些事件处理程序存储在哪里?会使我的应用程序变慢吗?

2个回答

1
不要这样做- 这会对您的jQuery性能产生负面影响。您不应将所有委托事件处理程序绑定到文档对象上。那可能是您可以创建的最糟糕的性能场景。如jQuery文档中的事件性能部分here所述-

将许多委派事件处理程序附加到document可能会降低性能。每次事件发生时,jQuery必须将该类型的所有附加事件的所有选择器与事件目标路径上到文档顶部的每个元素进行比较。为了获得最佳性能,请在尽可能靠近目标元素的文档位置附加委派事件。

避免在大型文档上过度使用documentdocument.body进行委派事件。对于委托事件处理,将它们绑定到最近的非动态父级要更有效率。

关于问题的惊人详细描述可以在this answer中找到。

希望这有所帮助!


我该如何检查委托给对象的事件处理程序数量? - sigmaxf

0

简而言之,绑定监听器会分配内存。如果您使用大量监听器并不断地将它们绑定到文档中,这些监听器将永远不会关闭,直到文档被卸载(即页面刷新、以旧式HTML方式硬加载另一个文档)。最终,在SPA中,您会遇到内存泄漏和浏览器崩溃问题。


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