.off() / .on() jQuery事件处理绑定组合的效率
Efficiency of .off() / .on() jQuery event handler binding combo
我有一个对象,当该对象实例化时,它将单击事件处理程序附加到<body>
。(附加过程发生在该对象的定义内)
这个对象在URL被改变时被实例化(当用户导航到另一个页面时)。
"每页"总是有一种类型的对象,如前所述,当页面更改时,它将重新实例化,旧的对象将不再存在。
附加过程如下:
var doc = $(document.body);
doc.off('click');
doc.on('click', function(){
do_stuff();
});
我使用这个,因为我注意到,如果简单地附加事件处理程序,省略.off()
,处理程序将触发更多次在一个简单的点击,当我浏览网站(因为它附加/注册与该对象的每个实例化)。
现在,我可以将这个附加过程移动到其他地方,例如在发生实例化的代码段中,这样它就不会依赖于那个对象,并确保处理程序只附加一次,但这将剥夺我对一些局部变量的访问权限,我将不得不使它们对该代码段可访问。
我的问题是:这会牺牲很多性能吗?我注意到这里的一些帖子,在stackoverflow上,强调这不是最佳的,但大多数示例显示的代码与.off()
或解除绑定发生在 .on()
/绑定。
重要提示:我使用的是backbone.js。这是一个"单页网站"。这些对象基本上是视图,它们的实例化发生在路由器中。
简而言之,不,使用off
没有任何有意义的性能损失。现在,我不会对着一堆圣经发誓,off
不可能导致性能问题,但我要说的是,在99/100(可能更像是999/1000或9999/10000)的现实世界中,您永远不必担心关闭导致性能问题。
换句话说,off
不会引起明显的性能下降,除非你对它做了一些非常疯狂的事情,或者有一个非常疯狂的网站无意中对它做了一些非常疯狂的事情。
另一方面,不调用off
可能会导致许多问题,与性能相关的和其他方面。
- 根据id将json数组组合为一个json数组
- 接受不在列表中的值-引导组合框
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 组合两个javascript函数
- Telerik rad组合框多列数据绑定
- Node.js中的JavaScript原型对象效率
- 组合 2 个 JavaScript .scroll 函数
- 如何使用jquery组合两个数组
- onChange不足以从Dojo组合框触发查询
- 组合承诺和非承诺值
- 所有控件的组合框
- 在D3中组合多个事件
- jquery扩展了崩溃效率
- AngularJS-如何只对多个事件的组合采取行动
- 如何在服务、技能、投资组合等方面添加滑动效果
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 如何在谷歌可视化中组合数字和模式格式化程序
- .off() / .on() jQuery事件处理绑定组合的效率
- 子组合器与级联:哪个性能更好,效率更高