Wir schreiben unsere Benutzeroberfläche mit Angular 2. Da dies so neu ist, gibt es nur sehr wenige Ressourcen, also bitte entschuldigen Sie, wenn meine Frage albern erscheint und bereits beantwortet wurde.Wie verbessert man die Parsing-Performance von Angular 2?
Zuerst ein wenig Hintergrund. Unser Produkt besteht aus "Modulen", die Widgets sind, die auf einer Seite abgelegt werden können. Da nicht alle Module neu geschrieben werden, um Angular 2 zu verwenden, wird es auf einer Seite gleichzeitig eine Mischung aus nicht-eckigen und eckigen Modulen geben. Aus diesem Grund haben wir beschlossen, jedes Angular2-Modul zu einer eigenständigen eckigen App zu machen.
In der Prototyp-Phase sah alles gut und schön aus, jedoch ein paar Monate vor der Veröffentlichung, und einige Wochen vor der Veröffentlichung sah sich jemand unsere Seitenladezeiten an und war weniger als beeindruckt. Auf meinem Rechner sind 5 Module mit aktiviertem prodMode in etwa 2,5 Sekunden zum Rendern mit 2 unserer kompliziertesten Module erforderlich, die jeweils eine Sekunde benötigen. Die zwei größten Vorlagen, die ich habe, sind 32 KB und 80 KB groß, aber da die Verarbeitungszeit die gleiche ist, vermute ich, dass die lineare Länge nicht so viel wie die strukturelle Komplexität beiträgt, und sie sind ziemlich komplex. Die anderen 3 Module sind viel einfacher.
Aus dieser Zeitachse scheint viel Zeit in das Analysieren der Vorlage und das Laden von Komponenten investiert worden zu sein. Also dachte ich, dass das vielleicht daran liegt, dass jedes Modul eine unabhängige eckige App ist und sie wahrscheinlich nicht die zwischengespeicherten Komponenten teilen. Also habe ich die BROWSER_APP_COMPILER_PROVIDERS aus der Liste der App-Provider in die Plattform-Provider verschoben. Das hat dazu geführt, dass alle Module einen RuntimeCompiler (glaube ich) wiederverwenden. Aber in der großen Skala der Dinge hat es die Situation nicht viel verbessert. Die Gesamtzeit ist auf 2,3 Sekunden gesunken, was den Aufwand kaum wert ist.
Jetzt sind die Module meist Assistenten. Das heißt, sie sitzen und sehen hübsch aus, bis der Benutzer auf sie klopft/klickt, um sie zu aktivieren. Das brachte mich dazu zu denken, was wäre, wenn ich das Template-Parsing inszenieren könnte? Wenn ich Angular sagen könnte, Wizard Steps bei Bedarf zu parsen, könnte ich die Ladezeit im Austausch für etwas Verzögerung verringern, wenn ich das Modul interagiere. Das ist es, was ich gerade erforsche, aber ich würde gerne die Beiträge der Community hören.
Vielen Dank für das Lesen.
UPDATE: Ich verwende RC.3.
Wissen Sie, ob Angular unterstützt/unterstützt die Verwendung von Webworkern für die parallele Analyse von Vorlagen? –
Mit Offline-Vorlage Compiler muss es überhaupt nicht analysieren, das ist eigentlich der Punkt von OTC AFAIK, neben diesem Code für Bindungen generiert wird, so dass sie zur Laufzeit nicht aufgelöst werden müssen (gleich für DI). –
Also habe ich offline Compiler getestet, und obwohl es die Seite doppelt so schnell lädt, ist es immer noch nicht vernachlässigbar. Wie es von 10 Sekunden auf einem mobilen Gerät zu 5 Sekunden ging. –