2

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

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

此对象“每页”始终存在一种类型,并且如前所述,当面板更改时它会重新实例化,并且旧对象将不再存在。

附加过程如下所示:

var doc = $(document.body);

doc.off('click');

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

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

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

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

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

4

1 回答 1

1

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

换句话说,off除非你用它做一些非常疯狂的事情,或者有一个非常疯狂的网站在不经意间做了一些非常疯狂的事情,否则不会导致明显的性能下降。

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

于 2013-03-21T21:03:34.713 回答