防止AngularJS脏检查每个$ digest循环数千行

时间:2013-12-12 11:40:20

标签: angularjs

我有一个可能有几千行的数据源。我希望用户能够滚动列表并过滤它而不会出现性能问题。每当记录发生变化时,我的数据源会自动触发事件。

目前,此数据已映射到$ rootScope.datasource。

我希望能够将这个大型数据集与Angular的$ digest循环中的其余部分隔离开来,并防止Angular每次在我的应用程序的其他地方发生无关的事情时检查数千行。我希望Angular在我告诉它时(仅在我的一个更改事件触发后)消化数据源。

我查看了BindonceWatch Fighters等图书馆。如果数据是完全静态的,这是一个很好的选择,但我的记录会偶尔发生变化,我希望在我告诉它时更新UI。

目前在Angular中是否可以使用?

2 个答案:

答案 0 :(得分:2)

您不应该观看大型数据集。而是,观察描述数据集状态的单个值。 该单个值可以是增量计数器或哈希数据。如果该值发生变化,将调用观察者监听器功能。

另一种选择 - 首次使用后取消注册观察者,如果数据集发生变化则注册观察者。

此外,您应该尝试不使用观察者并使用$broadcast更新状态。

答案 1 :(得分:1)

当您知道有更改时,您可以使用bindonce并强制更新UI。要触发此更新,您需要重新编译模板。我已经在这个plunker中通过'滥用'ng-include完成了这个,但你可以编写一个特殊的指令来做到这一点。