2014-03-05 91 views
0

問題簡而言之: 初始化牽線木偶合成視圖的大小約爲500的應用程序將暫停大約一分鐘。Backbone Marionette複合視圖渲染

我正在構建骨幹木偶應用程序來維護項目列表。當測試集合大小爲~50時,一切都很好。當限制增長時,應用程序無響應。

Store.ItemsListView = Marionette.CompositeView.extend({ 
     tagName: "div", 
     template: "#items-list", 
     itemView: Store.ItemView, 
     itemViewContainer: "tbody", 
     emptyView: Store.NoDataView, 
}); 

Store.ItemView = Marionette.ItemView.extend({ 
    tagName: "tr", 
    template: "#store-item" 
}); 

據我所知,這主要是由於DOM交互[在應用頁面中的CPU異形javascript]。我嘗試通過在itemView中緩存編譯模板的源代碼而不是DOM參考來優化模板。但沒有明顯的改善。

我想過使用ItemView本身來渲染集合here。因爲它將最終的HTML src附加到el。但是我的應用邏輯不允許這樣做。

什麼是其他優雅的方式來擺脫這樣的問題?分頁顯然是其中之一。但我有一種感覺,它可以以更好的方式處理。

回答

3

最後經過很多搜索後,發現Marionette Github上的CollectionView.reset performance問題。 很明顯,這個問題已在1.3.x版本的Marionette中解決和發佈,並意識到我的應用程序中存在一些錯誤,而不是Marionette。

對相同的進一步調試給了我一個提示,即在集合中爲每個模型調用endBuffering,而不是在提取後爲所有模型調用endBuffering。

所以,問題是,而不是reset事件,add事件正在我的收集級別觸發。後來才知道在提取中有reset選項需要設置。

現在的東西比perf test所說的要快99%。

+0

我一直在爭論同一個問題。徹底剝離我的應用程序,然後偶然發現這一點。原來應用程序正在使用Marionette v1.2。 非常感謝! –

+0

即使在木偶升級到1.8.5並設置重置時,im仍然存在性能問題:對集合提取設置爲true。看到我的問題在這裏:http://stackoverflow.com/q/25375045/725606。任何指針? –