是否有配置选项可以减少 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();
});
等..
我正在考虑一种在满足客户需求的同时提高应用程序性能的方法。现在看来摘要 运行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();
});
等..