Ich bezog mich auf diese Dokumentation und stieß auf das Kompilierungskonzept. Man kann entweder JIT- oder AOT-Kompilierung verwenden. Ich fand es jedoch sehr kurz und muss die folgenden Punkte im Detail kennen:
- Unterschiede zwischen diesen beiden Techniken
- Empfehlung, wann was zu verwenden ist
angular
compilation
Gaurang Patel
quelle
quelle
Es gibt zwar einige Antworten, aber ich möchte auch einige meiner Ergebnisse hinzufügen, da ich wirklich verwirrt war mit dem, was tatsächlich kompiliert wird, wie in allen Fällen,
TS
->JS
Konvertierung geschieht. Ich nehme einen Absatz aus Jeffs Blog als Referenz.JIT
Das
TS
vom Entwickler geschriebene Code wird zuJS
Code kompiliert . Dieser kompiliertejs
Code wird nun erneut vom Browser kompiliert, sodass erhtml
gemäß der Benutzeraktion dynamisch gerendert werden kann und dementsprechend zurangular
Laufzeit auch Codes für (für Komponenten, Änderungserkennung, Abhängigkeitsinjektion) generiert werden.(Der Browser-Compiler verwendet die Anweisungen und Komponenten einer Anwendung zusammen mit dem entsprechenden HTML- und CSS-Code und erstellt Komponentenfabriken, um Instanzen mit ihrer gesamten Logik zur Erstellung von Ansichten schnell auszumerzen.)
AOT
Der
TS
vom Entwickler geschriebene Code wird zuJS
Code kompiliert , dieserjs
wurde bereits auch für Angular kompiliert . Dieser kompiliertejs
Code wird nun erneut vom Browser kompiliert, damit derhtml
gerendert werden kann. Aber ist der Haken hier , dass die Funktionen vonangular
bereits betreut von genommen wordenAOT
Compiler und damit der Browser haben nicht viel zu befürchten über die Erstellung von Bauteilen, Änderungserkennung, Dependency Injection. Also haben wir :Mit AOT lädt der Browser eine vorkompilierte Version der Anwendung herunter. Der Browser lädt ausführbaren Code, damit er die Anwendung sofort rendern kann, ohne darauf warten zu müssen, dass die App zuerst kompiliert wird.
Der Compiler fügt externe HTML-Vorlagen und CSS-Stylesheets in das JavaScript der Anwendung ein und eliminiert separate Ajax-Anforderungen für diese Quelldateien.
Der Angular-Compiler muss nicht heruntergeladen werden, wenn die App bereits kompiliert ist. Der Compiler ist ungefähr die Hälfte von Angular selbst. Wenn Sie ihn weglassen, wird die Nutzlast der Anwendung drastisch reduziert.
Der AOT-Compiler erkennt und meldet Vorlagenbindungsfehler während des Erstellungsschritts, bevor Benutzer sie sehen können.
AOT kompiliert HTML-Vorlagen und -Komponenten in JavaScript-Dateien, lange bevor sie dem Client bereitgestellt werden. Ohne zu lesende Vorlagen und ohne riskante clientseitige HTML- oder JavaScript-Auswertung gibt es weniger Möglichkeiten für Injection-Angriffe.
Verbleibende Unterschiede werden bereits in den Aufzählungspunkten von Benyamin, Nisar & Gaurang behandelt.
Fühlen Sie sich frei, mich zu korrigieren
quelle
Benyamin und Nisar erwähnten hier einige gute Punkte. Ich werde es hinzufügen.
Während AOT theoretisch für Produktionszwecke eine attraktive Option als JIT darstellt, hatte ich meine Zweifel, ob AOT es wirklich wert ist!
Nun, ich habe nette Statistiken von Jeff Cross gefunden und es beweist, dass AOT die Bootstrapping-Zeit der App erheblich verkürzt. Der folgende Ausschnitt aus Jeff Cross 'Post gibt Ihnen einen schnellen Überblick darüber.
quelle
JiT (Just in Time) Zusammenstellung
Der Name selbst beschreibt die Arbeitsweise. Er kompiliert den Code gerade zum Zeitpunkt des Ladens der Seite im Browser. Der Browser lädt den Compiler herunter, erstellt den Anwendungscode und rendert ihn.
Es wird gut für die Entwicklungsumgebung sein.
AoT-Kompilierung (Ahead of Time)
Es kompiliert den gesamten Code zum Zeitpunkt der Erstellung der Anwendung. Der Browser möchte den Compiler also nicht herunterladen und den Code kompilieren. Bei dieser Methode kann der Browser die Anwendung einfach rendern, indem er nur den bereits kompilierten Code lädt.
Kann in der Produktionsumgebung verwendet werden
Wir können die JiT- und AoT-Zusammenstellung wie folgt vergleichen
quelle
JIT (Just-in-Time-Zusammenstellung)
Just-in-Time (JIT) ist eine Art von Kompilierung, die Ihre App zur Laufzeit im Browser kompiliert.
AOT (Ahead-of-Time-Zusammenstellung)
Ahead-of-Time (AOT) ist eine Art von Kompilierung, die Ihre App zur Erstellungszeit kompiliert.
quelle
Am Ende des Tages machen AOT (Ahead-of-Time) und JIT (Just-in-Time) die gleichen Dinge. Beide kompilieren Ihren Angular-Code, damit er in einer nativen Umgebung (auch bekannt als Browser) ausgeführt werden kann. Der Hauptunterschied besteht darin, wann die Kompilierung erfolgt. Mit AOT wird Ihr Code kompiliert, bevor die App im Browser heruntergeladen wird. Mit JIT wird Ihr Code zur Laufzeit im Browser kompiliert.
Hier ist Vergleich:
Vorteile von AOT:
quelle
Es gibt tatsächlich nur einen Angular-Compiler. Der Unterschied zwischen AOT und JIT hängt vom Timing und den Werkzeugen ab. Mit AOT wird der Compiler einmal zur Erstellungszeit mit einem Satz von Bibliotheken ausgeführt. Mit JIT wird es jedes Mal für jeden Benutzer zur Laufzeit mit einem anderen Satz von Bibliotheken ausgeführt.
quelle
JIT-Compiler, den wir während der Entwicklung des Winkelprojekts verwenden. Bei dieser Kompilierung (Konvertierung von TS in JS) erfolgt die Laufzeit der Anwendung. Wenn AOT beim Erstellen des Anwendungscodes für die Bereitstellung der Anwendung in der Produktion verwendet wird und dieses Mal unseren Anwendungscode mit dem Befehl ng build --prod erstellt, der einen Ordner namens webpack generiert, enthält webpack das Bündel aller Dateien (HTML) , CSS und Typoskript) im komprimierten Javascript-Format.
Die Größe des für die Produktion generierten Webpack-Ordners ist weitaus geringer als der für die Entwicklungsumgebung generierte Ordner (mit dem Befehl ... ng build), da der Compiler nicht im Webpack-Ordner enthalten ist. Dies verbessert die Leistung der Anwendung .
quelle