2013-07-05 38 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