2014-04-09 73 views
0

我正在寫一個大型項目的Javascript控制器,我發現我的自我使用「JQuery.on()」函數處理所有點擊事件,這是因爲大部分內容都是動態下載的。考慮到我使用「jQuery .off()」在再次綁定它們之前解除綁定點擊事件,是否有任何可能的使用它的危險。是否有任何可能的危險使用「JQuery.on()」大量

$('#container').off('click', '[data-link=some-link-id').on('click', '[data-link=some-link-id]', function() { 
    // handle event here... 
}); 
+1

您正在使用事件委託語法。整個問題的關鍵在於,您不必在動態加載內容時隨時調用它。 –

+1

使用它*有不正確的危險*。 – Jon

+0

請你多解釋一下 – Rabih

回答

1

在我的經驗中,它真的取決於應用程序。我發現使用jQuery廣泛地導致了瀏覽器的高內存開銷。從使用堆跟蹤到調試(在谷歌瀏覽器中),我發現這是因爲jQuery在內存中保存了很多對象。我發現的主要問題是,當您使用jQuery創建DOM節點或應用非標準JavaScript遍歷或函數時,jQuery必須跟蹤這些特定節點。

特別是在處理程序中,除了普通的javascript之外,不應該有太多的內存開銷。我發現,當談到優化時,每個實例都是特定於代碼和它必須操作的環境。如果您需要在移動設備上運行代碼,那麼由於這些環境的內存限制,您需要儘可能降低您的堆。

我發現如果遇到懷疑與javascript相關的性能問題,檢查堆快照是唯一有效的調試方法。

  1. 到位$('<div>')
  2. 嘗試創建使用原生的JavaScript的任何對象,並移除任何每個循環
  3. 更改使用的ID
  4. 移動任何DOM查詢本地JavaScript:我通常使用這些步驟減少內存佔用任何事件處理程序(onclick等)本地JavaScript或將它們放置在相關DOM節點的相關屬性中

從示例提供的我會是一個litt關心數據處理程序,因爲根據我的經驗,這需要jQuery跟蹤內存中的很多對象。如果我要優化這段代碼,我會盡可能多地將它們轉移到本機JS。