Ich habe das selbst erforscht. Ich arbeite an ziemlich alter Hardware in einem unbeschleunigten Browser. Der erste Rendervorgang ist ein Problem. Meine frühe Arbeit war, vorkompilierte Vorlagen zu cachen, wie Sie versuchen. Ich fand, dass dies nur eine minimale Geschwindigkeitsverbesserung lieferte.
Der eigentliche Engpass kam von meinen ng-repeat-Direktiven, der Anzahl der resultierenden Reflows und der Anzahl der DOM-Knoten/Wächter, die ich in jeder Iteration baute.
Einige Quellen haben vorgeschlagen, eine benutzerdefinierte Direktive zu erstellen, die das dom manuell zusammenfügt und es auf einmal anfügt. Das Ergebnis ist ein sehr minimaler Reflow und keine Beobachter. Der Nachteil ist sehr groß. Kein winkeliger Spaß mehr und viel unnötige Arbeit. Wichtiger noch, nichts davon lieferte eine ausreichend große Geschwindigkeitsverbesserung, um die Arbeit zu rechtfertigen.
Ich fand schließlich, dass die beste Geschwindigkeitsverbesserung vom Erzwingen der Hardwarebeschleunigung für jede ng-Wiederholungsiteration kam. Wie oben angedeutet, macht die ng-animate-Direktive in neueren Versionen eckig dies relativ trivial.
Sie werden die sofortige Seitenwiedergabe mit kleinen Reflow-Schluckauf sehen. ng-Umhang hilft hier nicht. Aufgrund der Animationsanforderung ist die Seite nicht getarnt, während die Wiederholung gerendert wird.Diese können jedoch mit etwas cleverem Spaß einigermaßen gut wiedergegeben werden. Ich verstecke eigentlich die ng-Wiederholung, bis der $ Standort sich ändert, eine Fortschrittsanzeige in der Zwischenzeit zeigend, und dann meine ng-Show umschalte. Das funktioniert wirklich gut.
Nachdem all das gesagt wurde, sollten Sie Ihre Vorlagen vorkompilieren wie folgt.
1) Wenn Ihre App startet, erstellen Sie einen neuen Cache für sich. Siehe http://docs-angularjs-org-dev.appspot.com/api/ng. $ CacheFactory
2) Füllen Sie diesen Cache mit kompiliert Vorlagen. Inject $ compile und rufen Sie es für jede Vorlage auf. Kompilieren gibt eine Funktion zurück, die Sie später für Ihren Bereich aufrufen werden. Geben Sie diese Funktion in Ihren Cache ein, so wie Sie es für richtig halten.
3) Erstellen Sie eine benutzerdefinierte Anweisung, die einen Cache-Schlüssel als Attribut akzeptiert. Suchen Sie in dieser Anweisung Ihren Kompiliercache nach der richtigen Kompilierfunktion ab. Rufen Sie die Funktion für Ihren aktuellen Bereich auf und hängen Sie das resultierende DOM an das Element an, das an die Anweisung übergeben wurde.
4) Sorta gewinnen :).
Sie können Bereiche mit [ng-show] (http://docs.angularjs.org/api/ng.directive:ngShow) ein-/ausblenden. Vielleicht möchten Sie auch in [$ templateCache] (http://docs.angularjs.org/api/ng.$templateCache) schauen, mit dem Sie Ihre Ansichten zwischenspeichern können. –
Ich denke, ich könnte uns ng-zeigen, aber dann müsste ich nicht das Loch Router und URL Management wegwerfen, dass Angular bietet? Nicht sicher, wie Sie $ templateCache verwenden, kann ich Dinge einrichten, so dass alle Vorlagen zwischengespeichert werden? –
Sie könnten zwei ng-app verwenden, um zwei Verhaltensweisen zu verwalten, denke ich. – GnrlBzik