不再需要的事件是否应该不受约束?

时间:2017-01-10 08:11:49

标签: javascript jquery html dom-events

我的网页上有导航。单击按钮时会显示导航。然后,当用户点击导航外的任何位置时,我会关闭导航。

$("#navbutton").click(function(){
     if($("#navigation:visible"))
       $('#navigation').hide();
     else {
       $('#navigation').show();
     }
});

$(document).click(function(event) { 
    if(!$(event.target).closest('#navigation').length) {        
            $('#navigation').hide();        
    }        
})

现在,即使导航已隐藏,document上的点击事件也会继续触发。我在文档上也有许多其他点击事件。

我的问题是,当导航已经隐藏时,应该删除文档上的点击事件是否有任何优势?是否会有一些浏览器的内存发布?我的网页会表现得更快吗?我知道对一个事件的影响很小。但是,假设我有100个类似的导航。删除100个不必要的事件会有益吗?

由于

3 个答案:

答案 0 :(得分:0)

阅读标题“你不知道JS:Async& Performance”后,我们非常清楚地表明,前成熟优化是所有邪恶的根源。

你可以直接跳过他书中的chapter

如果这是一个简单的网页,并且存在一定数量的DOM对象,而不是拥有事件监听器,那么内存中的所有时间都不会有任何损害,如果优化将不会提供任何性能。

在进行优化之前,你必须做一些基准测试,你必须了解你的基准测试,并与现实世界比较那些基准测试结果意味着什么?

答案 1 :(得分:0)

如果您删除元素而不是隐藏它们,如果您将来不需要它,那么浏览器现在可以删除那些事件处理程序,这是消除内存泄漏的方法之一。 最近我浏览了这个博客:

http://javascript.crockford.com/memory/leak.html

这是非常有用的博客。

答案 2 :(得分:0)

停止和事件与否将不会提供任何性能,事实上它只会被用户忽视。

如果您希望页面以IE6或更早版本的浏览器快速运行,那将非常有用。但对于比这更现代的浏览器,你将无法获得更多。

您可以查看这篇非常有用的文章:The Dangers of Stopping Event Propagation