Каков простой способ измерить продолжительность цикла дайджеста angularjs? Существуют различные методы анализа производительности цикла дайджеста, но каждый имеет свои собственные ловушки:
- Профилировщик Chrome: слишком много деталей, не разбивает цикл дайджеста таким образом, чтобы его было легко найти.
- Batarang (плагин для браузера AngularJS): слишком много накладных расходов, низкая частота обновления, взрывается с большими приложениями.
... должен быть способ получше?! 1?
источник
Следующий ответ расскажет вам о производительности цикла $ digest в режиме ожидания , т. Е. О производительности дайджеста, когда ни одно из ваших контрольных выражений не изменится. Это полезно, если ваше приложение кажется вялым, даже если представление не меняется. Для более сложных ситуаций см. Ответ aet.
Введите в консоль следующее:
angular.element(document).injector().invoke(function($rootScope) { var a = performance.now(); $rootScope.$apply(); console.log(performance.now()-a); })
Результат даст вам продолжительность цикла дайджеста в миллисекундах. Чем меньше число, тем лучше.
ЗАМЕТКА:
Вы также можете попробовать:
angular.element(document.querySelector('[ng-app]')).injector().invoke(function($rootScope) { var a = performance.now(); $rootScope.$apply(); console.log(performance.now()-a); })
источник
The listener is called only when the value from the current watchExpression and the previous call to watchExpression are not equal
. Ваш код не принимает во внимание слушателей. А angular привлекает множество слушателей. Вы бы никогда не позвонили,$apply()
если ничего не изменилось, поэтому ваши результаты рассказывают только половину истории. В зависимости от обстоятельств он может быть менее интересным;)angular.element(document)
мало что даст, если вы использовалиng-app
директиву для инициализации. В этом случаеng-app
вместо этого возьмите элемент. Например, делаяangular.element('#ng-app')
...Я нашел новый инструмент, который помогает при профилировании дайджеста: Digest-HUD
источник
Вы также можете использовать angular-performance
Заявление об отказе: я являюсь автором расширения
источник
Один удобный инструмент для отслеживания цикла дайджеста можно найти с помощью отличного инструмента ng-stats от @kentcdodds . Он создает такой небольшой визуальный элемент, который может быть реализован даже через букмарклет. Его даже можно использовать внутри iFrames, например jsfiddle.
Найдено на https://github.com/kentcdodds/ng-stats
источник
Вы можете использовать UX Profiler
источник
для строгого режима, один запуск дайджеста cucle, запустите его в консоли f12 в chrome
angular.element(document).injector().invoke(['$rootScope',function($rootScope) { var a = performance.now(); $rootScope.$apply(); return performance.now()-a; }])
источник
описанные выше инструменты уже дали вам представление об измерении производительности цикла дайджеста. Наиболее важными моментами для повышения производительности цикла дайджеста являются:
Внимательно отслеживайте события прокрутки, чтобы скрыть все невидимые элементы и
значительно сократить количество наблюдателей.
Иметь управляемые циклы дайджеста для всех остальных событий.
источник