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

时间:2013-03-21 10:33:29

标签: javascript jquery optimization backbone.js

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

当URL更改时(当用户导航到另一个页面时),将实例化此对象。

这个对象总是有一种类型&#39;每页&#39;,如前所述,它会在更改pange时重新实例化,旧对象将不再存在。

附加过程如下所示:

var doc = $(document.body);

doc.off('click');

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

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

现在,我可以将此附件进程移动到其他位置,例如在实例化发生的代码部分中,因此它不会依赖于该对象并确保处理程序只会附加一次,但是剥夺了我访问某些局部变量的权限,我必须让它们可以访问该代码部分。

我的问题是:这是否会在性能方面花费很多?我在这里注意到一些帖子,在stackoverflow上,强调这不是最优的,但是大多数示例都显示代码.off()或解除发生内部 .on() / binding。< / p>

重要提示:我使用的是backbone.js。这是一个单页的网站&#39;。对象基本上是视图,它们的实例化发生在路由器中。

1 个答案:

答案 0 :(得分:1)

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

换句话说,off不会导致明显的性能减慢,除非你做了一些真正疯狂的事情,或者有一个非常疯狂的网站,无意中做了一些非常疯狂的事情

另一方面,不调用off可能会导致许多问题,与性能相关等问题。