1

我正在考虑一种在满足客户需求的同时提高应用程序性能的方法。现在,摘要似乎每秒运行 5 次,而我们实际上只需要它每秒运行两次。

有没有办法减少摘要运行的次数?

4

2 回答 2

2

在 AngularJS 中,当摘要循环开始时有一组场景,其中一些场景是,每当绑定到$Scope$rootScope对象的值发生更改(如$scope.textor $rootScope.text)、DOM 事件(如 ng-click、ng-bind 等..),带回调的 Ajax($http 等),带回调的计时器($timeout,setTimeout 等),调用 $apply,$digest 等。

粉煤灰: 在此处输入图像描述

去做:

如果您想减少触发的摘要周期数,您必须查看上面列出的每个要点。$watchers就像您可以通过使用一次性绑定来减少数量一样(例如:{{::myProperty}} -文档),限制以编程方式触发 $apply ( $scope.$apply) 的情况,并替换$timeouts$scope.$evalAsync()(因为 $scope.$evalAsync()将尝试在相同的情况下触发摘要循环本身,而$timeout()将等待当前摘要循环完成)或在您发现更改并且不再需要像这样再次观看时取消注册观察者,

var unregister = $scope.$watch('foo', function () {
// Do something here ...
  unregister();
});

ETC..

于 2018-05-30T03:41:23.307 回答
2

这可能不是您正在寻找的答案,但是我不认为摘要周期是性能杀手。

根据变化采取行动可能会导致性能问题。

避免对更新产生影响的摘要循环的一种快速方法是缓存函数的结果,而不是将函数绑定到 HTML 模板。

eg:ng-show="shouldShow()"每次都会被摘要循环评估。如果您能够将此函数的结果缓存在 Controller 中的 JS 变量中,然后使用缓存的结果,您可能会看到性能改进。

例如:$scope.show = shouldShow(),那么ng-show="show"

于 2018-05-29T23:35:10.193 回答