2013-07-09 52 views
1

它只是我还是做ng-repeat DOM插入不批处理。众所周知,DOM操作速度很慢,应该对性能进行批量操作。在集合上使用ng-repeat时,它应该在内存中创建DOM元素,然后将它们一次全部插入,而不是一次插入一个。angularjs ngrepeat插入批处理

有没有关于如何得到这种行为的任何建议?

+1

你为什么认为他们会这样做(一次一个)?根据我所了解的Angular团队与Chrome团队共同合作来优化事情,这看起来好像它已经完成了,如果它确实效果最好?你有测试用例吗? – shaunhusain

+0

@shaunhusain我不完全确定,这正是我所观察到的。我看不到有关配料行为的任何文件,我搜索了很长时间。我不认为angularjs批次。 – Harry

+0

@shaunhusain,除非您要求提供批次更快的证据吗?只需在谷歌上查找它。 – Harry

回答

5

有一个very good answer about angular's databinding,从它的创作者之一。

请参见下面的评论,在那里,他解释了为什么角肮脏的检查方法比变化听众更好:

更改合并。假设你有一个项目数组。假设你想要 将项目添加到数组中,因为你要循环添加,每当你添加你正在触发改变的事件时,就是呈现UI。这 是非常糟糕的性能。 你想要的只是一次更新界面 一次,最后。变化事件太细。

换句话说,由于这种脏检查方法,角度已经只更新了一次UI,所有DOM更改。

+4

说角度已经批量更新DOM并不完全正确。它不是;只是任何DOM操作都应该在$ watch中运行,而这又只能由脏检查触发(因此所有更改都在同一个循环内运行)。但是,DOM更新本身并未分批处理(仅限于导致DOM更新发生),并且脏检查可以执行多次运行,导致DOM在多个单独的迭代中被更新。当事件处理程序被触发时,这仍然比更新DOM ad-hoc更好,但它不是批量更新DOM。 – zcrar70

+0

即使UI最终只呈现一次,也是如此,DOM仍在多次迭代中更新(而不是批处理)。我会更新答案,谢谢。 –