2013-10-15 11 views
7

C'è un modo per ottenere il numero totale di associazioni (collegato tramite modelli '{{ .. }}/ng-xxx="...", $scope.$watch(...), ecc.) Che il modulo sta utilizzando in qualsiasi momento?Ottieni il numero totale di associazioni nell'app/modulo

+0

possibile duplicato di [come contare il numero totale di orologi in una pagina?] (Http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches -on-a-page) –

risposta

8

Si dovrebbe essere in grado di ottenere un'idea approssimativa utilizzando document.getElementsByClassName("ng-binding").length. Come spiegato here, questa classe viene applicata agli elementi con legature {{ ... }} o ng-bind, quindi è possibile ottenere il numero o gli elementi utilizzando i collegamenti. Mancheranno quelli che non sono definiti in questo modo però.

Tutte le associazioni di espressioni devono utilizzare $parse per interpretare l'espressione in modo da poter provare ad aggiungere un codice di debug a questo servizio nel codice sorgente angolare se si è soddisfatti di una misura temporanea. Dovrebbe essere facile vedere quando viene creato un legame, ma più difficile da vedere quando viene distrutto.

Guardando il master corrente, sembra che $parse cambierà per 1.2.0 che potrebbe rendere le cose più facili in Chrome. Per questo dovresti essere in grado di utilizzare gli strumenti per sviluppatori di Chrome per acquisire un'istantanea dell'heap (dalla scheda "Profili") e cercare tutti gli oggetti con il costruttore Parser.

è anche possibile vedere il numero di osservatori di avere tutta la vostra applicazione utilizzando qualcosa di simile

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

mi rendo conto nessuno di questi sono grandi soluzioni a ciò che si sta chiedendo, ma sono almeno qualcosa. Un suggerimento finale è che se si sta facendo questo per motivi di prestazioni, Batarang per Chrome ha una sezione prestazioni molto buona.


Nelle versioni più recenti di angolare (versione 1.3.2 e successive), è anche possibile utilizzare

$rootScope.$countWatchers(); 

se si include il modulo ngMock nella pagina. Vedi i documenti here.

+0

Questa è una bella risposta. Mi ha aiutato a trovare, a colpo d'occhio, alcuni problemi evidenti con la mia pagina web che non avevo notato prima. –

+0

Penso che la risposta accettata da http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches-on-a-page sia anche correlata –

Problemi correlati