2017-01-10 50 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