javascript - .off()/.on() jQuery 事件处理程序绑定(bind)组合的效率

标签 javascript jquery optimization backbone.js

我有一个对象,当该对象被实例化时,它将一个点击事件处理程序附加到 <body> . (附加过程发生在该对象的定义中)

当 URL 改变时(当用户导航到另一个页面时)这个对象被实例化。

“每页”总是有一种类型的此对象,如前所述,它会在面板更改时重新实例化,旧对象将不再存在。

附加过程如下所示:

var doc = $(document.body);

doc.off('click');

doc.on('click', function(){
   do_stuff();
});

我使用它是因为我注意到如果简单地附加事件处理程序,省略 .off() ,当我浏览网站时,处理程序将通过简单的单击触发更多次(因为它已附加/注册到该对象的每个实例化)。

现在,我可以将这个附加过程移动到其他地方,例如在发生实例化的代码部分,这样它就不会依赖于那个对象并确保处理程序只会被附加一次,但那会剥夺我的权利访问某些局部变量的权限,我必须让该代码部分可以访问它们。

我的问题是:这会不会在性能方面付出很多代价?我注意到这里的一些帖子,在 stackoverflow 上,强调这不是最佳的,但大多数示例显示的代码带有 .off()。或解除绑定(bind)发生在 内部 .on()/绑定(bind)。

重要说明:我正在使用 backbone.js。这是一个“单页网站”。这些对象基本上是 View ,它们的实例化发生在路由器中。

最佳答案

简而言之,不,使用 off 没有任何有意义的性能损失。现在我不会在一堆圣经上发誓 off 不可能导致性能问题,但我会说在 100 个中有 99 个(可能更像是 1,000 个中有 999 个或 10,000 个中有 9999 个) ) 真实世界的案例,您永远不必担心关闭会导致性能问题。

换句话说,off 永远不会导致明显的性能下降,除非你用它做了一些非常疯狂的事情,或者有一个非常疯狂的网站无意中做了一些非常疯狂的事情

另一方面,不调用 off 会导致很多问题,包括性能相关问题和其他问题。

关于javascript - .off()/.on() jQuery 事件处理程序绑定(bind)组合的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545053/

相关文章:

javascript - 你能给 Dart 中的函数添加属性吗?

javascript - 如何使用 d3.data().enter().call()

javascript - 每个 javascript、jquery 的 translate3d 定位问题

c++ - 我如何确定将完成返回值优化

javascript - 动画结束时导航到 href

javascript - NativeScript 调试器工具的 JavaScript 控制台中的颜色

javascript - 设置下拉菜单的默认值

javascript - 传递获取参数吗?

mysql - SQL 优化最佳解释?

optimization - cudaMallocHost 与 malloc 以获得更好的性能显示没有区别