是否有配置选项可以减少 AngularJS 1.x 摘要周期的数量?

Is there a config option to lower the amount of AngularJS 1.x digest cycles?

我正在考虑一种在满足客户需求的同时提高应用程序性能的方法。现在看来摘要 运行s 每秒 5 次,而我们真正需要它的地方可能是每秒两次 运行。

有没有办法降低摘要 运行 的次数?

这可能不是您要找的答案,但我不认为摘要循环是性能杀手。

根据更改采取行动可能会导致性能问题。

避免摘要循环作用于更新的快速方法是缓存函数的结果,而不是将函数绑定到 HTML 模板。

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

例如:$scope.show = shouldShow(),然后是ng-show="show"

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

PFA:

待办事项:

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

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

等..