2013-07-09 199 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仍在多次迭代中更新(而不是批處理)。我會更新答案,謝謝。 –