Есть ли опция конфигурации для уменьшения количества циклов дайджеста AngularJS 1.x? - PullRequest
0 голосов
/ 30 мая 2018

Я размышлял над тем, как повысить производительность приложения и удовлетворить требования клиентов.Сейчас кажется, что дайджест запускается 5 раз в секунду, когда нам действительно нужно, чтобы он работал, возможно, два раза в секунду.

Есть ли способ уменьшить количество раз, когда дайджест запускается?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

В AngularJS существует ряд сценариев, когда начинается цикл дайджеста, некоторые из них, когда значение, связанное с объектом $ Scope или $ rootScope , изменяется (например,$scope.text или $rootScope.text), события DOM (например, ng-click, ng-bind и т. Д.), Ajax с обратными вызовами ($ http и т. Д.), Таймеры с обратными вызовами ($ timeout, setTimeout и т. Д.), Вызов$ применяются, $ дайджест и т. д.

PFA: enter image description here

Для выполнения:

Если вы хотите уменьшить количество запущенных циклов дайджеста, вам нужно изучить каждую из перечисленных выше точек.Как вы можете уменьшить число $watchers, используя одноразовую привязку (например: {{:: myProperty}} - документация ), ограничивая случаи программного запуска $ apply ($scope.$apply),и заменив $timeouts на $scope.$evalAsync() (потому что $scope.$evalAsync() будет пытаться запускать в том же самом цикле дайджеста, тогда как $timeout() будет ожидать выполнения текущего цикла дайджеста) или отменить регистрацию наблюдателей, как только вы обнаружите изменение ибольше не нужно смотреть снова, как это,

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

и т.д ..

0 голосов
/ 30 мая 2018

Вероятно, это не тот ответ, который вы ищете, однако я не думаю, что цикл дайджеста является фактором, снижающим производительность.

Действия, основанные на изменениях, могут вызывать проблемы с производительностью.

Быстрый способ избежать циклов дайджеста, действующих при обновлении, - кэшировать результат функций вместо привязки функций к шаблонам HTML.

Например: ng-show="shouldShow()" будет оцениваться каждый раз циклом дайджеста.Если вы можете кэшировать результат этой функции в переменной JS в контроллере, а затем использовать кэшированный результат, вы можете увидеть улучшения производительности.

например: $scope.show = shouldShow(), затем ng-show="show"

...