2016-05-23 3 views
2

Ich habe vor einiger Zeit mit dem Batarang-Plugin getüftelt, um etwas Leistung zu analysieren. Ich bemerke, dass am Anfang jedes Logs ein Abschnitt steht, der dem sogenannten regularyInterceptedExpression gewidmet ist. Kann mir jemand erklären, was das bedeutet und welche Möglichkeiten es gibt, die Leistung zu verbessern? Ich habe irgendwo gelesen, dass die Eigenschaft '=' in Direktiven verwendet werden könnte. Wenn jemand anderes dies gesehen hat, gibt es eine Lösung?Batarang regularInterceptedExpression

Antwort

8

Wenn Sie den AngularJS-Code kennen, können Sie innerhalb der Funktion addInterceptor(parsedExpression, interceptorFn) die Funktion regularInterceptedExpression(scope, locals, assign, inputs) definieren. Der einzige Platz, an dem die Funktion addInterceptor(parsedExpression, interceptorFn) verwendet wird, ist die Funktion $parse(exp, interceptorFn, expensiveChecks). Hier werden der String und andere Uhren in Funktionen umgewandelt. Sie müssen die angular.js-Datei

1) verbessern die $parse(exp, interceptorFn, expensiveChecks) Funktion aktualisieren, um die Quelle der Analyse zu halten:

Finden Sie das Ende des Verfahrens und jedes Schaltergehäuse Ende Update mit den $$source auf das erste Argument Einstellung von addInterceptor Funktion.

 parsedExpression.$$source = exp; // keep the source expression handy 
     return addInterceptor(parsedExpression, interceptorFn); 

    case 'function': 
     exp.$$source = exp; // keep the source expression handy 
     return addInterceptor(exp, interceptorFn); 

    default: 
     noop.$$source = exp; // keep the source expression handy 
     return addInterceptor(noop, interceptorFn); 

2) innerhalb der regularInterceptedExpression Funktion sammeln die Statistiken von Anrufe an diese Funktion:

var fn = regularWatch ? function regularInterceptedExpression(scope, locals, assign, inputs) { 
    var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs); 
    window.$$rieStats = window.$$rieStats || {}; 
    window.$$rieStats[parsedExpression.$$source] = (window.$$rieStats[parsedExpression.$$source] ? window.$$rieStats[parsedExpression.$$source] : 0) + 1; 
    return interceptorFn(value, scope, locals); 

3) Sie Anwendung ausführen und überprüfen Sie die Statistiken, dh die Entwicklungstools öffnen und schreiben $$rieStats in die JavaScript Konsole. Sie sollten die Anzahl der Beobachter sehen, die von der Funktion regularInterceptedExpression aufgerufen werden.

Object.keys($$rieStats).sort(function(a,b){return $$rieStats[a]-$$rieStats[b]}).reverse().forEach(function(item){ console.log(item, $$rieStats[item])}) 

TIPP: Sie können auch die $$rieStats Zählen zu den anderen Zweig Funktion hinzufügen oneTimeInterceptedExpression zu verfolgen, um eine Zeit als auch verbindlich.