2013-10-15 6 views
7

Gibt es eine Möglichkeit, die gesamte Anzahl der Bindungen (über Vorlagen '{{ .. }}/ng-xxx="...", $scope.$watch(...), etc.), die Ihr Modul zu jedem Zeitpunkt verwendet?Erhalten Gesamtanzahl der Bindungen in Ihrer App/Modul

+0

möglich Duplikat von [Wie auf einer Seite Gesamtzahl der Uhren zählen?] (Http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches -on-a-page) –

Antwort

8

Sie sollten in der Lage sein, eine grobe Idee mit document.getElementsByClassName("ng-binding").length zu bekommen. Wie erklärt here, diese Klasse wird auf Elemente mit {{ ... }} oder ng-bind Bindungen angewendet, so dass Sie die Anzahl oder Elemente mit Bindungen erhalten können. Es werden jedoch alle vermisst, die auf diese Weise nicht definiert sind.

Alle Ausdrucksbindungen sollten $parse verwenden, um den Ausdruck zu interpretieren, sodass Sie versuchen könnten, diesem Dienst im eckigen Quellcode Debugcode hinzuzufügen, wenn Sie mit einer temporären Kennzahl zufrieden sind. Es sollte leicht sein zu sehen, wenn eine Bindung erstellt wird, aber schwerer zu sehen, wenn sie zerstört wird.

Wenn Sie den aktuellen Master betrachten, sieht es so aus, als würde sich $parse für 1.2.0 ändern, was die Arbeit in Chrome erleichtern könnte. Hierzu sollten Sie in der Lage sein, mit den Chrome Developer-Tools einen Heap-Snapshot (auf der Registerkarte "Profile") zu erstellen und nach allen Objekten mit dem Parser-Konstruktor zu suchen.

Sie können auch die Anzahl der Beobachter sehen Sie in Ihrer App wie diese

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); 

Ich weiß, keines dieser sind große Lösungen zu

mit etwas, was Sie fordern, aber sie sind zumindest etwas. Ein letzter Vorschlag ist, dass, wenn Sie dies aus Leistungsgründen tun, Batarang für Chrome eine sehr gute Leistung Abschnitt hat.


In neueren Versionen von Winkeln (1.3.2), können Sie auch

$rootScope.$countWatchers(); 

verwenden, wenn Sie das ngMock Modul in der Seite enthalten. Siehe die Dokumentation here.

+0

Das ist eine ziemlich tolle Antwort. Es half mir, auf einen Blick einige eklatante Probleme mit meiner Webseite zu finden, die ich vorher nicht bemerkt hatte. –

+0

Ich denke, dass die akzeptierte Antwort von http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches-on-a-page auch verwandt ist –

Verwandte Themen