2011-10-10 57 views
3

我一直在玩Backbone,看看這個框架是一個很好的選擇,從現在開始,並在我們的應用程序前進。一個要求是我們必須支持Internet Explorer 7+,另一個是每頁至少顯示200個項目。Internet Explorer 7/Backbone中可能的內存泄漏?

爲了測試框架,我構建了一個非常簡單的列表,它在除Internet Explorer 7之外的所有主流瀏覽器中都完美無缺。似乎有一些內存泄漏,因爲每次重置數據時總渲染時間都會增加。

我設置了一些測試場景:

隨着事件的聲明:http://jsfiddle.net/mefraimsson/a2YMF/

無事件聲明:http://jsfiddle.net/mefraimsson/u6byQ/

我有一個想法是,事件宣告從來就沒有清理時元素被刪除並添加到DOM。當我運行「沒有聲明事件」的測試場景時,經常點擊重新加載數據,渲染時間非常穩定,但運行「有了事件聲明」,渲染時間迅速增加,用於IE7的內存量增加。這就是爲什麼我認爲某處存在內存泄漏的原因。

  • 是否有任何人誰都有經驗,這樣大量的與主幹數據的呈現?
  • 有沒有人遇到過Backbone的內存泄漏問題?
  • 當使用Backbone處理大量數據時,您是否推薦了另一種方法?而不是大量的子視圖使用一個視圖和迭代模板中的數據可能是一個可能的解決方案,但是那麼感覺就像你沒有充分利用Backbone?
  • 您的意見是什麼?您認爲這與事件聲明有關嗎?或者是Backbone的實施是否泄露了內存?

在此先感謝

回答

8

內存泄漏是在普通的Javascript應用程序的一個常見問題。我認爲有一些框架試圖爲你處理這個問題,但是骨幹網並沒有。您使用的瀏覽器確實會在注意到這些泄漏的方式以及它們導致的問題方面發揮一些作用,但它們仍然存在於其他瀏覽器中。通常情況下,瀏覽器不是問題所在,但事件綁定是通過使用回調函數在JavaScript中處理的。

我寫了一篇文章與一種方法來處理它的建議討論這個,特別是與觀點:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

請務必閱讀註釋,太多。還有其他一些很好的建議來處理那裏的內存泄漏。

+0

我基本上已經以類似的方式處理了視圖的移除,但是您指的文章非常棒!非常感謝你。 現在我掙扎了一番,最終從事件聲明中刪除了我的「高級」選擇器,即 「click td:first-child input [type = checkbox]」:「check」, 「click td:first-child」:「checkSelect」, 「click td:gt(0)」:「select」 , 到 「click」:「select」 而這似乎解決了我在IE7中的內存泄漏問題。 – marefr

+0

我想知道是否有這樣的標準慣例,你的技術看起來很乾淨(我沒有考慮直接觸發事件的視圖...)。謝謝。 –