2013-05-18 5 views
8

Ich kann ng-include verwenden, um eine partielle innerhalb einer eckigen Ansicht zu enthalten, oder ich kann Server Seite Teiltöne verwenden, um es auf dem Server zu tun. Ich denke darüber nach, serverseitige Teiltöne anstelle von eckigen Teiltönen und dann ng-include (mit dem Skript-Tag) zu verwenden, weil ich irgendwo gelesen habe, dass eckige Teilbereiche neue Bereiche erstellen und dies die Leistung von $ digest beeinträchtigen kann.angularjs/rendering Leistungsunterschied zwischen Inlining oder Verwendung von ng-include

Gibt es eine Gültigkeit dafür? Was ist der Effekt auf die Leistung, wenn Winkel mit

Antwort

9

ng-include enthält einen neuen Bereich erstellen und eine Uhr (auf einem Pfad Ausdruck von ng-include verwendet) auf einem Umfang registrieren, wo die ng-include verwendet wird. Während dies eine zusätzliche Verarbeitung erfordert, basiert es immer noch auf JavaScript-Objekten und ist daher sehr schnell. Die Wirkung einer neuen Uhr plus eines zusätzlichen Bereichs sollte in den meisten Fällen völlig vernachlässigbar sein.

Der einzige wirkliche Unterschied, den ich sehen kann, ist, dass ng-include Ihre teilweise asynchron enthält/rendern, so dass Sie ein bisschen Verzögerung sehen können, vor allem beim Holen von Teiltönen über das Netzwerk (aber dies kann durch das Vorladen von Partials als gemildert werden hier beschrieben: https://stackoverflow.com/a/12346901/1418796)

kurz gesagt: in den meisten Fällen die Wirkung von ng-include sollte vernachlässigbar sein, wenn partials vorbelastete ist. Ein letzter Kommentar: "vorzeitige Optimierung ist die Wurzel allen Übels". Starten Sie die Anpassung der Mikrodaten nicht, bis Sie die Leistung der Ihre-Anwendung messen und feststellen, dass ng-include ein Engpass ist.

+2

Auf der anderen Seite wird ng-include (s) innerhalb von ng-repeat (s) sehr schnell anfangen, große Leistungsverschlechterungen aufgrund des Async-Mechanismus zu zeigen. Die beste Optimierung, die ich in meiner angularJS-App vorgenommen habe, war das Erstellen einer ng-include-cached-Direktive (synchron beim Auftreffen auf den Cache). – Guillaume86

+0

@ Guillaume86: Möchten Sie den Quellcode für diese Direktive freigeben? Ich wäre sehr interessiert. – paldepind

+1

@paldepind hier ist es: https://gist.github.com/guillaume86/9272837 aber Sie werden wahrscheinlich eine neue mit dem letzten ngInclude-Code aus der letzten eckigen Version schreiben wollen. Meine benutzte eine alte 1.0.x als Basis. – Guillaume86