2017-01-03 17 views

答えて

62

JIT使用する際についての勧告 - のための時間だけで活字体をコンパイルしますそれを実行する。

  • ブラウザでコンパイルされます。
  • 各ファイルは別々にコンパイルされます。
  • コードを変更した後、ブラウザページを再読み込みする前にビルドする必要はありません。
  • 地元の開発に適しています。

AOT - ビルドフェーズ中にTypeScriptをコンパイルします。

  • コマンドライン(高速)でマシン自体でコンパイルされます。
  • すべてのコードが一緒にコンパイルされ、HTML/CSSがスクリプトにインライン展開されます。
  • コンパイラ(Angularサイズの半分)を展開する必要はありません。
  • より安全で、元のソースは公開されていません。
  • 生産ビルドに適しています。
+1

の50%を占める角度コンパイラの必要性を根絶することによって、私は非常に経験しましたJust-in-Timeコンパイルを使用するとパフォーマンスが低下します。特に旧式のAndroidデバイスではそうです。また、最初のページの読み込み時のレンダリングギャップがはるかに大きくなります(古いAndroid搭載端末では、プロジェクトのサイズによっては最大10秒)。 –

+0

この明快で簡単な説明をありがとう。 –

+9

Typescriptはちょうどコンパイルされていないため、ブラウザはそれを行うことができません。どちらの場合も、typescriptはビルドプロセス中にコンパイルされます。 – Robouste

10

ここでBenyaminとNisarはいくつかの良い点を述べました。私はそれに追加します。

理論的には、AOTは生産目的でJITよりも魅力的な選択肢に見えますが、AOTが本当に価値があるかどうか疑いがありました。

まあ、私はnice stats by Jeff Crossを見つけました。それは、AOTがアプリケーションのブートストラップ時間を大幅に短縮することを証明しています。以下は、実際に一つだけの角のコンパイラがあり

enter image description here

3

、それについてあなたの迅速なアイデアを与えるだろうジェフ・クロスポストからスナップ。 AOTとJITの違いはタイミングとツーリングの問題です。 AOTを使用すると、コンパイラーは1つのライブラリー・セットを使用してビルド時に1回実行されます。 JITを使用すると、実行時に毎回異なるユーザー層のライブラリを使用して実行されます。かなり良い説明here ..

TLDR見つかり

5

本質的には、TSをJSに変換した後、ブラウザがJSをバイナリに変換するとき、angle2のアプリケーションでコードを2回コンパイルします。

後者を制御することはできませんが、TSからJSへのコンパイルをいつ実行するかを制御できます。

angular2では、JIT(デフォルト)を使用すると、コードがブラウザに読み込まれた後に両方のコンパイルが行われます(TS - > JS - > binary)。ブラウザー上でTS - > JSコンパイルを実行するのに追加のオーバーヘッドだけでなく、angular2コンパイラはangular2パッケージのほぼ半分のサイズになるので、これを避けると、ペイロードが大幅に増加します。

JSへのAOT precompliesのTSコードは、コンパイル時だけでなく、コードのサイズを縮小、コードも

関連する問題