jQuery bind()unbind()和on()和off()

时间:2013-08-14 13:32:22

标签: javascript jquery performance events bind

我正在为一个小网站管理网站。

取消绑定事件以提高性能(客户端)是否有意义?或者,取消绑定事件并在30秒后再次绑定它会花费更多性能吗?

我的问题: bind() - unbind()或on()。off()背后的想法只是增加基于客户端的性能还是应该将它用于其他场景?这个问题的出现是因为我的javascript代码正在增长和增长(大约30%),因为解除绑定事件。我认为,有些事情可能不起作用,当用户不按照我想要的方式进行交互时......

编辑:大多数时候我绑定/解除绑定按键事件,因为我需要diff的箭头键。场景。

3 个答案:

答案 0 :(得分:5)

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

不是在许多特定DOM元素上绑定事件侦听器,而是可以采用更“鸟眼”的方法并在DOM树顶部附近绑定几个侦听器,然后在触发事件时检查实际点击的内容

这样你就不会在绑定/解除绑定大量事件监听器上花费CPU,而是在处理事件时(通常不会引人注意)占用小的CPU。

此处详细介绍:event delegation vs direct binding when adding complex elements to a page

答案 1 :(得分:4)

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

绑定 - 解除绑定(如果没有正确完成)可能会产生很难找到的内存泄漏。如果您正在使用webkit,请使用unbinding与绑定一次获取性能的堆快照,然后您可以做出最佳决策。

这是一个链接:

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

答案 2 :(得分:1)

避免担心这一点的一个解决方案,特别是如果你处理不断变化的元素或大量数据,就是在身体上注册你的事件,然后指定一个选择器参数。

像这样:

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

在此处查看$.on()