jQuery bind()取消绑定()以及on()和off()

jQuery bind() unbind() and on() and off()

本文关键字:on off 以及 取消 bind jQuery 绑定      更新时间:2023-09-26

我在一个小的网页管理区工作。

解除事件绑定以提高性能(客户端)有意义吗?还是取消绑定事件并在30秒后再次绑定会耗费更多性能?

我的问题:bind()-unbind()或on().of()背后的想法只是为了提高基于客户端的性能,还是应该将其用于其他场景?出现这个问题是因为我的javascript代码由于取消绑定事件而不断增长(约30%)。我认为,有些事情可能不起作用,当用户交互时,正如我所希望的。。。

编辑:大多数时候im绑定/取消绑定按键事件,因为我需要不同场景的箭头键。

由于性能原因,仅为再次绑定而取消绑定可能容易出现错误,并且在大多数情况下会使事情变得过于复杂。

您可以采取更"鸟瞰"的方法,只在DOM树顶部附近绑定几个侦听器,然后在触发事件时检查实际点击了什么,而不是在许多特定的DOM元素上绑定事件侦听器。

这样,您就不会在绑定/解除绑定大量事件侦听器上花费CPU,而是在处理事件时会受到较小的CPU冲击(这通常不明显)。

这里详细介绍了这一点:向页面添加复杂元素时的事件委派与直接绑定

如果您尝试绑定和取消绑定,则会为垃圾收集器实际进入并清理代码创造竞争条件。最好绑定一次,而不必再次绑定。如果您的客户端预计要运行很长一段时间(几周、几个月),那么您应该将内存管理和内存泄漏视为更关心性能的问题。

绑定-解除绑定(如果操作不正确)可能会导致很难找到的内存泄漏。如果您使用的是webkit,请对您使用解绑定和绑定的性能进行一次堆快照,然后您就可以做出最佳决策。

这里有一个链接:

http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

避免担心这一点的一个解决方案是向主体注册事件,然后指定选择器参数,尤其是在处理不断变化的元素或大量元素时。

像这样:

$("body").on("click", ".my-actual-element", function(aEvent) {
   // Event handler code goes here.
});

点击此处查看更多$.on().