129 votes

Angular 2: compilation Just-in-Time (JiT) contre Ahead-of-Time (AoT)

Je faisais référence à cette documentation et suis tombé sur le concept de compilation. On peut utiliser la compilation JIT ou AOT. Cependant, je l’ai trouvé très bref et j’ai besoin de connaître les points suivants en détail,

  • Différences entre ces deux techniques
  • Recommandation sur quand utiliser quoi

163voto

Benyamin Shoham Points 1171

JIT Compiler Tapuscrit juste à temps pour l'exécuter.

  • Compilé dans le navigateur.
  • Chaque fichier compilé séparément.
  • Pas besoin de construire après la modification de votre code et avant le rechargement de la page du navigateur.
  • Adapté pour le développement local.

AOT Compilation de la Machine pendant la phase de construction.

  • Compilé par la machine elle-même, via la ligne de commande (plus Rapide).
  • Tous les code compilé ensemble, inline HTML/CSS dans les scripts.
  • Pas besoin de déployer le compilateur (la Moitié de la taille Angulaire).
  • Plus sécurisé, source d'origine ne soient pas divulgués.
  • Adapté pour la production de versions.

77voto

Shashank Vivek Points 3858

Bien qu'il existe quelques réponses mais je voudrais ajouter certains de mes résultats en tant que bien, parce que j'étais vraiment confus avec ce qui est en cours d'élaboration comme dans tous les cas, TS --> JS conversion se produit. Je prend par de Jeff blog comme référence.

JIT

L' TS code écrit par le développeur est compilé en JS code. Maintenant, ce compilé js code est compilé par le navigateur à nouveau de sorte que l' html peut être rendu de façon dynamique comme par l'action de l'utilisateur et par conséquent les codes pour angular ( pour les composants, la détection du changement, de l'Injection de Dépendances) sont également générés lors de l'exécution .

(Le navigateur compilateur est ce qui prend de l'application des directives et des composants, ainsi que leur correspondant HTML et CSS, et crée composant usines rapidement timbre cas avec l'ensemble de leurs la création de la vue logique.)

Lorsque Angulaire 2 de la demande est amorcé dans le navigateur, le compilateur JIT effectue beaucoup de travail pour analyser les composants d'une application lors de l'exécution et de générer le code en mémoire. Lorsque la page est actualisée, tout le travail qui a été fait est jeté, et le compilateur JIT fait le travail une fois de plus.

AOT

L' TS code écrit par le développeur est compilé en JS code ,ce js a déjà a été compilé pour angulaires ainsi. Maintenant, ce compilé js code est compilé à nouveau par le navigateur à nouveau de sorte que l' html peuvent être rendus. Mais, le hic ici est que les caractéristiques de l' angular a déjà été pris en charge par AOT compilateur et donc le navigateur n'avez pas à vous inquiéter beaucoup sur la création de composant, de la détection de changement, l'Injection de Dépendance. Donc, nous avons :

Rendu plus rapide

Avec AOT, le navigateur télécharge une version pré-compilée de l'application. Le navigateur charge le code de l'exécutable de sorte qu'il peut rendre l'application immédiatement, sans attendre de les compiler la première application.

Moins de requêtes asynchrones

Le compilateur inlines externe des modèles HTML et feuilles de style CSS à l'intérieur de l'application JavaScript, l'élimination de séparer les requêtes ajax pour les fichiers source.

Les petits Angulaire cadre de taille de téléchargement

Il n'y a pas besoin de télécharger l'angle de compilateur si l'application est déjà compilé. Le compilateur est à peu près la moitié de l'Angulaire de lui-même, de sorte que l'omission il réduit considérablement l'application de la charge utile.

Détecter modèle erreurs plus tôt

La AOT compilateur détecte et signale modèle de liaison des erreurs lors de l'étape de génération avant que les utilisateurs puissent les voir.

L'amélioration de la sécurité

AOT compile des modèles HTML et les composants dans les fichiers JavaScript longtemps avant qu'ils soient servis au client. Avec pas de modèles à lire et pas risqué côté client HTML ou JavaScript, de l'évaluation, il y a moins de possibilités pour les attaques par injection.


Les différences qui subsistent sont déjà couverts dans les points de balle de Benyamin, Nisar & Gaurang .

Hésitez pas à me corriger

25voto

Gaurang Patel Points 1652

Benyamin et Nisar mentionné quelques bons points ici. Je vais l'ajouter à elle.

Bien que théoriquement, AOT semble une option intéressante que JIT pour la production de but, mais j'ai eu mes doutes si AOT vraiment la peine!

Eh bien, je l'ai trouvé sympa les stats par Jeff Cross et il n'prouver que AOT réduit considérablement le temps d'amorçage de l'application. Ci-dessous composant logiciel enfichable de Jeff Cross post va vous donner rapide idée à ce sujet,

enter image description here

21voto

vivekkurien Points 366

JiT (Just in Time) Compilation

Le nom lui-même décrit le travail, Il compile le code dans le temps de chargement de la page dans le navigateur. Le navigateur va télécharger le compilateur et de construire le code de l'application et la rend à la fois.

Ce sera bon pour l'environnement de développement.

AoT (à l'Avance) Compilation

Il compile tout le code au moment de la construction de l'application. Si le navigateur ne voulez pas télécharger le compilateur et compiler le code. Dans cette méthode de navigateur peut facilement rendre l'application par juste le chargement de la déjà le code compilé.

Peut être utilisé dans l'environnement de production

Nous pouvons comparer le JiT et AoT compilation comme ci-dessous

enter image description here

3voto

mercy Points 125

Trouvé une très bonne explication ici ..

TLDR;

Essentiellement, nous sommes en train de compiler le code deux fois avec angular2 apps, une fois quand nous convertir TS en JS et puis quand le navigateur convertit JS binaire.

Bien que nous ne pouvons pas contrôler ce dernier, nous pouvons toutefois de contrôle lors de la compilation de TS les JS est exécuté.

Avec angular2, si vous allez avec JIT (qui est par défaut), à la fois la compile se produire après que le code est chargé dans le navigateur (c'est à dire TS -> JS -> binaire). Non seulement est-il une surcharge supplémentaire pour faire le TS -> JS compilation à la volée sur le navigateur, mais aussi, la angular2 compilateur est presque la moitié de la taille de la angular2 package donc, si nous éviter cela, on peut réduire la taille de la charge utile et de manière significative.

AOT precomplies TS code JS, réduire le temps de compilation, ainsi que la taille du code, par l'éradication de la nécessité pour l'angle d'compilateur, ce qui représente 50% du code

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X