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

Efficiency of .off() / .on() jQuery event handler binding combo

本文关键字:组合 效率 绑定 jQuery on off 事件处理      更新时间:2023-09-26

我有一个对象,当该对象实例化时,它将单击事件处理程序附加到<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可能会导致许多问题,与性能相关的和其他方面。