2013-10-15 18 views
7

Czy istnieje sposób, aby uzyskać całkowitą # wiązań (po dośrodkowaniu poprzez szablony {{ .. }}/ng-xxx="...", $scope.$watch(...), itd.), Że moduł jest użycie w dowolnym momencie?uzyskać całkowitą liczbę wiązań w app/modułu

+0

możliwe duplikat [Jak policzyć całkowitą liczbę zegarków na stronie?] (Http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches -on-a-page) –

Odpowiedz

8

Powinieneś być w stanie uzyskać przybliżony pomysł za pomocą document.getElementsByClassName("ng-binding").length. Jak wyjaśniono w artykule here, ta klasa jest stosowana do elementów z wiązaniami {{ ... }} lub ng-bind, dzięki czemu można uzyskać liczbę lub elementy za pomocą powiązań. Tęskni za tymi, które nie są zdefiniowane w ten sposób.

Wszystkie powiązania wyrażenia powinny używać $parse do interpretacji wyrażenia, aby można było spróbować dodać kod debugowania do tej usługi w kanonowym kodzie źródłowym, jeśli jesteś zadowolony z tymczasowej miary. Powinno być łatwo zobaczyć, kiedy tworzone jest wiązanie, ale trudniej jest zobaczyć, kiedy zostanie ono zniszczone.

Patrząc na bieżący wzorzec, wygląda na to, że $parse zmieni się na 1.2.0, co może ułatwić pracę w przeglądarce Chrome. W tym celu powinieneś mieć możliwość korzystania z narzędzi dla programistów Chrome, aby zrobić migawkę sterty (z zakładki "Profile") i wyszukać wszystkie obiekty za pomocą konstruktora Parser.

Można też zobaczyć liczbę obserwatorów masz całej aplikacji przy użyciu coś jak ten

var watchersPerScope = $('.ng-scope').map(function() { 
    var s = $(this).scope(); 
    if(s.$$destroyed) return 0; 
    return (s.$$watchers || 0) && s.$$watchers.length; 
}).get(); 
var totalWatchers = 0; 
for(var i=0; i<watchersPerScope.length; i++) 
    totalWatchers += watchersPerScope[i]; 
console.log(totalWatchers); 

Zdaję sobie sprawę, żaden z tych wspaniałych rozwiązań, o co prosicie, ale są przynajmniej coś. Ostateczna sugestia jest taka, że ​​jeśli robisz to ze względu na wydajność, Batarang dla Chrome ma bardzo dobrą sekcję wydajności.


W nowszych wersjach kątowej (1.3.2 i nowsze), można również użyć

$rootScope.$countWatchers(); 

jeśli zawierają moduł na stronie ngMock. Zobacz dokumentację here.

+0

To jest naprawdę świetna odpowiedź. Pomogło mi to znaleźć na pierwszy rzut oka kilka poważnych problemów na mojej stronie, których wcześniej nie zauważyłem. –

+0

Myślę, że akceptowana odpowiedź z http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches-on-a-page jest również związana –

Powiązane problemy