Angular のJITコンパイラとAOTコンパイラ
AngularにはコンパイラがJITとAOTがあります。
JITは実行時にブラウザでアプリケーションをコンパイルします。
AOTはビルド時にアプリケーションをコンパイルします。また、テンプレートもコンパイル対象となります。
AOTでコンパイルするには
ng serve --aot
とします。AOTコンパイルだと事前コンパイルになるので、レンダリングが早くなります。
テンプレートもコンパイル対象となる為、セキュリティの観点からもAOTコンパイラを使用するのが良いようです。
テンプレートファイルがコンパイル対象になるとは
テンプレートファイルもコンパイル対象になりますが、これは具体的にどういうことかというと、以下のように引数を一つ持つハンドラがあるとします。
import { Component } from '@angular/core'; @Component({ selector: 'app-root', template: ` <h3>{{title}}</h3> <button (click)='onClick()'>ボタン</button> `, styleUrls: ['./app.component.styl'] }) export class AppComponent { title = 'testapp'; public onClick(str: string){ this.title = str; } }
これをng serve --aot
でコンパイルすると以下のエラーが発生し、起動することができません。
$ ng serve --aot ** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ ** Date: 2018-10-23T12:25:15.551Z Hash: b6e5471b4ece023f3372 Time: 7117ms chunk {main} main.js, main.js.map (main) 1.94 kB [initial] [rendered] chunk {polyfills} polyfills.js, polyfills.js.map (polyfills) 697 bytes [initial] [rendered] chunk {runtime} runtime.js, runtime.js.map (runtime) 6.22 kB [entry] [rendered] chunk {styles} styles.js, styles.js.map (styles) 17.1 kB [initial] [rendered] chunk {vendor} vendor.js, vendor.js.map (vendor) 326 kB [initial] [rendered] ERROR in src\app\app.component.ts.AppComponent.html(3,11): : Expected 1 arguments, but got 0.
テンプレートで引数を指定するか、コンポーネント側で引数なしにするか、どちらかしないとAOTではコンパイルが通りません。
開発時はJIT、本番はAOTかなと思います。
ちなみにng build --prod
とすると、AOTになります。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント