Как я могу измерить производительность дайджест цикл мой в AngularJS приложение?



каков простой способ измерения продолжительности цикла дайджеста angularjs? Существуют различные методы анализа производительности цикла дайджеста, однако каждый из них имеет свои собственные питфалы:




  • Chrome Profiler: слишком много деталей, не разбивает цикл дайджеста простым в поиске способом

  • Batarang (AngularJS browser plugin): слишком много накладных расходов, медленная частота обновления, взрывается с большими приложениями.


... там должно быть лучше путь ?!1?

540   8  

8 ответов:

здесь секрет. В инструменты разработчика Chrome, сделать профиль запуска процессора. После того, как вы остановили захват, в нижней части экрана находится треугольник вниз рядом с "тяжелым (снизу вверх)". Нажмите на треугольник и выберите "Flame Chart". После того, как вы находитесь в режиме Flame Chart, вы можете масштабировать и панорамировать, чтобы увидеть циклы дайджеста, сколько времени они занимают, и точно, какие функции вызываются. Диаграмма пламени настолько невероятно полезна для отслеживания проблем с загрузкой страниц, проблем с производительностью ng-repeat, цикла дайджеста проблемы! Я действительно не знаю, как мне удалось отладить и профилировать перед диаграммой пламени. Вот пример:

Flame Chart in Chrome dev tools

следующий ответ скажет вам ожидания производительность цикла $ digest, т. е., производительность дайджеста, когда ни одно из ваших выражений часов не изменяется. Это полезно, если ваше приложение кажется вялым, даже если представление не меняется. Для более сложных ситуаций, увидеть ответ ает это.


введите в консоль следующее:

angular.element(document).injector().invoke(function($rootScope) { 
  var a = performance.now(); 
  $rootScope.$apply(); 
  console.log(performance.now()-a); 
})

результат даст вам продолжительность цикла дайджеста, в миллисекундах. Чем меньше номер, тем лучше.


Примечание:

Доми отметил в комментарии: angular.element(document) не даст много, если вы использовали ng-app указание для инициализации. В таком случае, получите элемент. Например, делая angular.element('#ng-app')

вы также можете попробовать:

angular.element(document.querySelector('[ng-app]')).injector().invoke(function($rootScope) { 
  var a = performance.now(); 
  $rootScope.$apply(); 
  console.log(performance.now()-a); 
})

вот новый инструмент, который я нашел, что помогает в дайджест профилирования: Digest-HUD

enter image description here

вы также можете использовать угловое-производительность

Это расширение обеспечивает в реальном масштабе времени диаграммы контроля числа наблюдатели, время дайджеста и скорость дайджеста. Вы также получаете дайджест распределение времени так, что вы сможете разобрать исключительно длинный дайджест время от более рекурсивных отцов и все данные в реальном времени связаны с события, чтобы можно было определить, какие действия изменили приложение выступления. Наконец, вы можете время услуги способ и подсчет их выполнение для определения тех, которые оказывают большее влияние на время работы вашего приложения.

Angular performance screenshot

Disclamer: я являюсь автором расширения

один удобный инструмент для наблюдения за циклом дайджеста можно найти с помощью excellent ng-stats tool by @kentcdodds. Он создает небольшой визуальный элемент, как так, и даже может быть реализован с помощью букмарклета. Он даже может быть использован внутри iFrames, как jsfiddle.

good digest cycleenter image description here

небольшая утилита для отображения статистики о угловой дайджест/часы вашей страницы. Эта библиотека в настоящее время имеет простой скрипт для составьте график (см. ниже). Он также создает модуль под названием angularStats который имеет директиву под названием angular-stats который можно использовать для размещения угловой статистики в определенном месте на указанной странице.

найдено в https://github.com/kentcdodds/ng-stats

можно использовать UX Profiler

  • просмотр транзакций пользователя, т. е. щелчок и вся вызванная им активность (другие события, XHRs, таймауты) сгруппированы вместе.
  • измерения времени (как пользователь чувствует это) всей пользовательской транзакции и/или ее частей.
  • комбинированная асинхронная трассировка стека.
  • Focused Profiler-профиль только проблемное событие.
  • Угловое 1.икс интеграция.

enter image description here

для строгого режима, один запуск digest cucle, запустите его в консоли f12 в chrome

angular.element(document).injector().invoke(['$rootScope',function($rootScope) { var a = performance.now(); $rootScope.$apply(); return performance.now()-a; }])

описанные выше инструменты уже дали вам идею измерения производительности цикла дайджеста Наиболее важными точками для повышения производительности цикла дайджеста являются

  • внимательно следите за событиями прокрутки, чтобы скрыть все невидимые элементы и
    значительно уменьшите количество наблюдателей.

  • есть управляемые циклы $ digest для всех других событий.

Comments

    Ничего не найдено.