В AngularJS существует ряд сценариев, когда начинается цикл дайджеста, некоторые из них, когда значение, связанное с объектом $ Scope или $ rootScope , изменяется (например,$scope.text
или $rootScope.text
), события DOM (например, ng-click, ng-bind и т. Д.), Ajax с обратными вызовами ($ http и т. Д.), Таймеры с обратными вызовами ($ timeout, setTimeout и т. Д.), Вызов$ применяются, $ дайджест и т. д.
PFA: 
Для выполнения:
Если вы хотите уменьшить количество запущенных циклов дайджеста, вам нужно изучить каждую из перечисленных выше точек.Как вы можете уменьшить число $watchers
, используя одноразовую привязку (например: {{:: myProperty}} - документация ), ограничивая случаи программного запуска $ apply ($scope.$apply
),и заменив $timeouts
на $scope.$evalAsync()
(потому что $scope.$evalAsync()
будет пытаться запускать в том же самом цикле дайджеста, тогда как $timeout()
будет ожидать выполнения текущего цикла дайджеста) или отменить регистрацию наблюдателей, как только вы обнаружите изменение ибольше не нужно смотреть снова, как это,
var unregister = $scope.$watch('foo', function () {
// Do something here ...
unregister();
});
и т.д ..