Jaki jest prosty sposób na zmierzenie czasu trwania cyklu podsumowania angularjs? Istnieją różne metody analizy wydajności cyklu podsumowania, jednak każda ma swoje własne pułapki:
- Chrome Profiler: zbyt wiele szczegółów nie rozkłada cyklu podsumowania w łatwy do znalezienia sposób
- Batarang (wtyczka do przeglądarki AngularJS): Zbyt duży narzut, niska częstotliwość odświeżania, eksploduje przy dużych aplikacjach.
... musi być lepszy sposób?! 1?
źródło
Następująca odpowiedź powie ci bezczynną wydajność pętli $ digest, tj. Wydajność podsumowania, gdy żadne z wyrażeń obserwujących się nie zmieni. Jest to przydatne, jeśli aplikacja działa wolno, nawet jeśli widok się nie zmienia. W przypadku bardziej złożonych sytuacji zapoznaj się z odpowiedzią aet.
Wpisz w konsoli:
angular.element(document).injector().invoke(function($rootScope) { var a = performance.now(); $rootScope.$apply(); console.log(performance.now()-a); })
Wynik poda czas trwania cyklu podsumowania w milisekundach. Im mniejsza liczba, tym lepiej.
UWAGA:
Możesz też spróbować:
angular.element(document.querySelector('[ng-app]')).injector().invoke(function($rootScope) { var a = performance.now(); $rootScope.$apply(); console.log(performance.now()-a); })
źródło
The listener is called only when the value from the current watchExpression and the previous call to watchExpression are not equal
. Twój kod nie bierze pod uwagę żadnych słuchaczy. A angular tworzy wielu słuchaczy. Nigdy nie zadzwoniłbyś,$apply()
gdyby nic się nie zmieniło, dlatego twoje wyniki mówią tylko połowę historii. W zależności od okoliczności może być mniej interesujący;)angular.element(document)
nie przyniesie wiele, jeśli użyjeszng-app
dyrektywy do inicjalizacji. W takim przypadku pobierzng-app
zamiast tego element. Np. Robiącangular.element('#ng-app')
...Oto nowe narzędzie, które znalazłem, które pomaga w tworzeniu profili: Digest-HUD
źródło
Możesz także użyć wydajności kątowej
Disclamer: Jestem autorem rozszerzenia
źródło
Jedno przydatne narzędzie do monitorowania cyklu podsumowania można znaleźć w doskonałym narzędziu ng-stats autorstwa @kentcdodds . Tworzy taki mały element wizualny i można go nawet wdrożyć za pomocą bookmarkletu. Można go nawet używać wewnątrz ramek iFrame, takich jak jsfiddle.
Znaleziono pod adresem https://github.com/kentcdodds/ng-stats
źródło
Możesz użyć UX Profiler
źródło
dla trybu ścisłego, jedno uruchomienie skrótu cucle, uruchom go w konsoli f12 w chrome
angular.element(document).injector().invoke(['$rootScope',function($rootScope) { var a = performance.now(); $rootScope.$apply(); return performance.now()-a; }])
źródło
narzędzia opisane powyżej dały Ci pomysł pomiaru wydajności pętli podsumowującej Większość ważnych punktów dla zwiększenia wydajności cyklu podsumowania to
Uważnie monitoruj zdarzenia przewijania, aby ukryć wszystkie niewidoczne elementy i
znacznie zmniejszyć liczbę obserwatorów.
Miej możliwe do zarządzania cykle podsumowania $ dla wszystkich innych zdarzeń.
źródło