Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jQuery/JavaScript中删除事件监听器有什么好处吗?_Javascript_Jquery_Performance - Fatal编程技术网

在jQuery/JavaScript中删除事件监听器有什么好处吗?

在jQuery/JavaScript中删除事件监听器有什么好处吗?,javascript,jquery,performance,Javascript,Jquery,Performance,我在ASP.NETWebForms应用程序中大量使用jQuery来处理任何非应用程序关键性的客户端(例如,动态验证、动画、一般的绒毛和漂亮的东西) 在这个解决方案中,我使用更新面板,所以主页很少刷新。因此,事件侦听器可以在每次异步回发时绑定 考虑到这一点(或在任何其他典型情况下),使用.off删除我知道当时不活动的元素上的事件侦听器有什么好处吗 如果我让事件侦听器保持活动状态,标准浏览器的性能会有很大的下降(如果有的话),还是只有在绝对极端的情况下才会明显下降 当我在诸如body之类的高级元素

我在ASP.NETWebForms应用程序中大量使用jQuery来处理任何非应用程序关键性的客户端(例如,动态验证、动画、一般的绒毛和漂亮的东西)

在这个解决方案中,我使用更新面板,所以主页很少刷新。因此,事件侦听器可以在每次异步回发时绑定

  • 考虑到这一点(或在任何其他典型情况下),使用
    .off
    删除我知道当时不活动的元素上的事件侦听器有什么好处吗
  • 如果我让事件侦听器保持活动状态,标准浏览器的性能会有很大的下降(如果有的话),还是只有在绝对极端的情况下才会明显下降
  • 当我在诸如
    body
    之类的高级元素上绑定(
    .on
    )时,是否应该解除绑定(
    .off
在单个网页的生命周期内多次绑定和解除绑定未使用的事件侦听器的情况下,处理(如果需要)未使用的事件侦听器的最佳方法是什么


如果您有任何测试显示,如果浏览器速度减慢,有大量事件侦听器,请告诉我。如果有人拥有经过验证的数字,那就再好不过了。

离开不活动的事件侦听器肯定会对性能产生负面影响。清除不必要的事件侦听器无疑是一种更好的做法

我还建议您在绑定事件侦听器时使用作用域,如

$(".demo").on("click.test", function(){ ... });
在这里,我用
test
确定了
click
事件的范围,以便

$(".demo").off("click.test");

任何其他具有点击式侦听器的演示类都不会关闭。

您最好对应用程序进行一些测试,看看是否遇到性能问题。我认为这太宽泛了,无法有意义地回答
.off()
如果不能解决一些问题,它将不存在,因此使用它可能会有好处。当您删除元素时,jQuery会自动解除绑定任何jQuery绑定事件处理程序的绑定,因此这是一种不需要.off的情况。有一种情况确实需要.off,即当您将一个新的事件处理程序绑定到一个已经有该事件处理程序的元素时,但是,在这种情况下,最好避免再次绑定该事件处理程序。Wish SO只会让用户在对原因发表评论后才进行向下投票。“保留不活动的事件侦听器肯定会对性能产生负面影响”在某些情况下,当然可以,但并不总是这样。在某些情况下,您必须有相当多的额外事件侦听器才能对此产生任何影响。通常最好是围绕jQuery在删除元素时所做的自动清理来设计代码。运行该代码段需要300毫秒。如果我关闭事件侦听器,我想它可能会带来1ms的差异。我明白这没有多大区别,但肯定有一些区别。我看不出在哪种情况下关闭事件监听器没有任何区别。任何可感知的区别。