AngularJS的过滤器 - 性能澄清?

时间:2015-12-05 21:11:00

标签: javascript angularjs

read

  

HTML中的AngularJS过滤器将执行(多次!)   每个消化周期。这意味着您的过滤功能或过滤器将多次执行,即使基础数据或条件未发生变化

我猜它的原因是AngularJs的工作原理,因此它需要知道(在多个循环之后)所有设置都正确。

基本上就是这样:

<div ng-repeat="stock in ctrl.stocks | filter: ctrl.searchField">
   {{stock.name}}
</div>

应该成为这个:

<div ng-repeat="stock in ctrl.filteredStocks">
        Pre Filtered {{stock.name}}
</div>

通过类似的东西:

  self.filter = function() {
        console.log(1); //for counter
        self.searchField = self.searchFieldModel;
        self.filteredStocks = filterFilter(self.stocks, self.searchField);
    };

正如您所看到的 - 我已在控制器中添加了console.log,以查看此filterStocks的评估次数。

问题

出于观察目的 - 如何跟踪filter中的次数:

<... ng-repeat="stock in ctrl.stocks | filter: ctrl.searchField">

正在运行?

FIDDLE

1 个答案:

答案 0 :(得分:0)

  

出于观察目的 - 如何在

中跟踪过滤器的次数

您可以通过在过滤器工作程序中放置一个简单的console.count来跟踪它...

当然,如果您可以预先过滤阵列,那么您可以获得性能,但考虑到AngularJS的工作原理,优化数据绑定的唯一方法是在您确定时使用:: one-time binding你的数据是不可变的...... 否则,使用脏检查 alghoritm,没有办法增加性能,因为差异测试应用于每个摘要周期!

希望帮助