我有一个对象,当实例化该对象时,它会将一个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;。对象基本上是视图,它们的实例化发生在路由器中。
答案 0 :(得分:1)
简而言之,不,使用off
没有任何有意义的性能损失。现在我不会发誓对一堆圣经说off
导致性能问题是不可能的,但我会说在100分中有99分(或许更像是1000分中的999分)现实世界中的9999个案例,您永远不必担心会导致性能问题。
换句话说,off
不会导致明显的性能减慢,除非你做了一些真正疯狂的事情,或者有一个非常疯狂的网站,无意中做了一些非常疯狂的事情
另一方面,不调用off
可能会导致许多问题,与性能相关等问题。