我正在考虑一种在满足客户需求的同时提高应用程序性能的方法。现在,摘要似乎每秒运行 5 次,而我们实际上只需要它每秒运行两次。
有没有办法减少摘要运行的次数?
我正在考虑一种在满足客户需求的同时提高应用程序性能的方法。现在,摘要似乎每秒运行 5 次,而我们实际上只需要它每秒运行两次。
有没有办法减少摘要运行的次数?
在 AngularJS 中,当摘要循环开始时有一组场景,其中一些场景是,每当绑定到$Scope或$rootScope对象的值发生更改(如$scope.text
or $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..
这可能不是您正在寻找的答案,但是我不认为摘要周期是性能杀手。
根据变化采取行动可能会导致性能问题。
避免对更新产生影响的摘要循环的一种快速方法是缓存函数的结果,而不是将函数绑定到 HTML 模板。
eg:ng-show="shouldShow()"
每次都会被摘要循环评估。如果您能够将此函数的结果缓存在 Controller 中的 JS 变量中,然后使用缓存的结果,您可能会看到性能改进。
例如:$scope.show = shouldShow()
,那么ng-show="show"