2013-07-05 78 views
2

我想優化我的應用程序中的渲染。我有以下循環:EmberJS:如何分割DOM的渲染?

stuff.forEach(function(content){ 
    ... 
    content.doUpdates(); // Generates a bunch of DOM updates 
}) 

如果stuff只有2或3個元素是一切正常,但當它有10個或更多,渲染開始鎖定瀏覽器 - 這是正常的,因爲它試圖做所有的更新一次。

所以我想分割渲染。我最初的想法是把每個doUpdates放在一個Ember.run.nexthttp://emberjs.com/api/classes/Ember.run.html#method_next(我不介意每個內容是分開渲染的)。但是「使用Ember.run.next預定的多個操作將合併到相同的稍後運行循環中」。

有沒有推薦的方法來做到這一點?

回答

0

Ember.run.next真的只是一個看中setInterval。沒有太多的好處,除非你正在尋找一個快速解決方案。

Ember.run.scheduleOnce是一個更好的選擇。您可以給它特定的生命週期runloop,如afterRender,具體取決於您希望在runloop中運行的時間。

我發現有用的一種方法是確保綁定屬性以分階段方式更新。這在性能方面給了一些低下的成果,因爲你真的只是讓燼寶來照顧大部分的工作。

獲得性能提升的另一個簡單方法是不綁定不改變的東西。如果可能,請使用oneWayBinding

+0

謝謝。我不相信scheduleOnce會在這種情況下提供幫助 - 所有的更新仍然會發生在同一個循環中(與下一個相同)。除非我誤解你將如何使用它?基本上我需要找到一種方法來執行不同循環中的每個「doUpdates」... – PJC