2017-01-10 48 views
0

我的网页有导航。导航显示点击一个按钮。然后当用户点击导航之外的任何地方时关闭导航。如果不再需要的事件可以解除绑定?

$("#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多个好处吗?

感谢

回答

0

阅读标题后“你不知道JS:异步&性能” getify只是说得很清楚,过早的优化是一切罪恶的根源。

您可以直接跳到他的书的那chapter的。

如果这是一个简单的网页,并有DOM对象的审核量超过其事件侦听器的所有时间的记忆会做任何伤害,如果优化将提供什么太多的表现。

你进入优化之前,你必须做一些基准,你必须了解你有什么标杆,并比较现实世界什么的基准测试结果意味着什么呢?

+0

会删除''scroll'and事件window.resize'是什么优势? – user31782

+0

@ user31782这也取决于,但通常是。滚动和调整大小的方式比其他事件更频繁,所以如果你有任何沉重的东西而不是删除它们。还有一个限制调整大小和滚动的做法。 – Burimi

+0

你的意思是这个油门事件https://css-tricks.com/the-difference-between-throttling-and-debouncing/他们在每100ms后执行scrll事件吗?我们可以像jQuery一样在事件中添加100ms吗? – user31782

0

如果删除的元素,而不是隐藏它,如果你不需要它在未来,浏览器现在给天删除这些事件处理程序本身它是要删除的内存泄漏的方法之一。 最近我通过这个博客去了:

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

这是真正有用的博客。

+0

删除'scroll'和'window.resize'事件会有什么好处? – user31782

0

停止和事件与否不会放弃在性能什么,其实它也不过被用户忽视。

,如果你希望自己的网页跑得快于IE6或旧版本浏览器将是有益的。但对于浏览器而言,比现在更加现代化,你不会再有更多的东西。

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

+0

删除'scroll'和'window.resize'事件会有什么好处? – user31782