Gibt es eine Möglichkeit, das Auslösen von $ digest auf jedem $ http.get zu deaktivieren?

8

Hintergrund

winkels $http Dienst löst einen $digest auf jedem get aus (wenn kein $digest bereits läuft):

%Vor%

Zusätzlich zum Abrufen von Objekten aus unserer API verfügt unsere App über viele Direktiven mit templateUrl - die von angular mit $http abgerufen werden. Dies verursacht hunderte von $digest Schleifen beim Kaltstart.

Wenn Sie die obige Zeile auskommentieren, wird die Anzahl der $digest -Schleifen auf etwa 3 reduziert, und die App wird VIEL schneller ausgeführt, ohne dass Bindungen unterbrochen werden (zumindest weil $http kein a auslöst $digest ).

Frage

Gibt es eine Möglichkeit, $ http zu deaktivieren, die den $ Digest auslöst?

    
seldary 28.08.2014, 12:56
quelle

2 Antworten

3

Verwenden Sie $httpProvider.useApplyAsync(true); in App-Konfiguration. Dann wird die Templates-Anweisung, die innerhalb von 10 ms geladen wird, demselben Digest gegenüberstehen. Dies wird den Digest-Zyklus-Aufruf reduzieren. hier

    
Fisherman 31.01.2016 05:32
quelle
0

Es ist vielleicht nicht möglich, direkt das zu tun, was Sie wollen, aber Sie können die Auswirkungen dieser Digest-Zyklen begrenzen. Setzen Sie <div ng-if="everythingLoaded"> auf den größten Teil der Seite und setzen Sie everythingLoaded auf true, nachdem alle $http -Aufrufe abgeschlossen sind.

Zum Beispiel:

%Vor%

Der Digest-Zyklus wird weiterhin ausgeführt, ist aber viel schneller, da ng-if die Auswirkungen auf das DOM und einen Großteil Ihres Controllers eliminiert, bis die Bedingung erfüllt ist.

Ich bin mir ziemlich sicher, dass die Verwendung des Template-Caching für das Problem des Ladens der Vorlage gelöst wird, vorausgesetzt, es ist immer noch ein Problem in den letzten eckigen Versionen.

    
Steve Campbell 24.11.2015 00:15
quelle

Tags und Links