2012-07-21 151 views
3

所以我發現我的應用程序在一些擴展使用後變得緩慢。特別是當我創建很多視圖,每個項目都在一個長列表中。我曾經想過,通過view.remove()去除這些視圖可以幫助解決問題,但是當它們從頁面中移除時,我注意到Chrome的時間軸顯示我的DOM節點數量不會減少。我添加的每個視圖都會繼續增加此計數。事實上,似乎減少此節點計數的唯一一件事情就是刷新頁面。骨幹刪除視圖和DOM節點

這感覺不對我,我覺得我搞砸了一些真正的基礎,因爲這個問題似乎與我的所有意見,並不僅僅是這些的發生。這些查看列表發生得更快,因爲它們有很多。

有沒有人有什麼建議,我應該找什麼?什麼樣的原因會導致這種行爲?

我會提供代碼,但我不知道會有什麼幫助。

TL; DR - View.remove()是從頁面移除的觀點,但我的DOM節點計數繼續走升不下來。

+0

您是否檢查過它是否可以在其他瀏覽器中重現?可能是Chrome瀏覽器的Web檢查器的一個錯誤。對於少於1200個Dom節點而言,這是完全正確的,當它超出您必須檢查哪些視圖不顯示並立即將其刪除時 – Deeptechtons 2012-07-21 05:24:19

+1

您的視圖是否傾聽任何模型或收集事件?這可能會導致在視圖中通過'this.el'和'this。$ el'泄漏。 – 2012-07-21 05:31:45

+0

@Deeptechtons我希望我能夠說這是一個Chrome檢查器問題,但我很高興確保最薄弱的環節正坐在這臺電腦前。 ;-)注意,我想我應該澄清我的DOM元素正在被刪除。像document.getElementsByTagName(「*」)。length這樣的東西會導致適當的計數更改,具體取決於我添加還是刪除視圖。我使用Derick Baileys殭屍刪除的想法,並且每個視圖都有一個關閉的功能,即成功刪除和解除綁定事件。所以我的事件下降了,意見也沒有了(至少表面上)。但節點計數仍然存在。 – jmk2142 2012-07-21 05:44:47

回答

6

由於未正確清理視圖而導致內存泄漏。

閱讀:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

這:http://lostechies.com/derickbailey/2012/03/19/backbone-js-and-javascript-garbage-collection/

你需要做的不僅僅是呼籲您的看法.remove()。當您嘗試關閉視圖時,您需要正確銷燬所有事件和其他綁定。執行此操作的常用方法是在視圖中提供close方法,我在第一篇文章中對此進行了描述。

請務必仔細閱讀從約翰尼大鹿註釋上的第一篇文章,太。它指出了一個實施事件清理的好方法。

+0

感謝您的答案,但我認爲畝解決了我的問題,在評論。其實,我甚至在討論中提到了你和你的殭屍技巧。 :-)在這種情況下解決這個問題的禮儀是什麼? 我還沒有讀過你鏈接的垃圾收集文章,所以很有用,就像你所有的文章一樣。 – jmk2142 2012-07-22 22:05:47