JIT (just in time) 实时编译,即时编译
JIT的优势是Profile -Based Optimization ,也就是边跑边优化,根据运行时信息然后随着时间的推移得到尽可能优化的代码,适用于开发调试
AOT-ahead of time 预先编译,静态编译
相比之下AOT的优点:
在客户端我们不需要导入体积庞大的angular编译器,这样就可以减少我们js脚本库的大小,使用AOT编译后的应用,不再包含任何HTML片段,取而代之的是编译生成的Typescript代码,这样的话Typescript编译器就能提前发现错误,总之,使用AOT编译模式,我们的模板是类型安全的,适用于部署发布。
特性 | JIT | AOT |
编译平台 | (Browser)浏览器 | (Server)服务器 |
编译时机 | Runtime(运行时) | (Build)构建阶段 |
包大小 | 较大 | 较小 |
执行性能 | 慢 | 更好 |
启动时间 | 长 | 更短 |
基于JIT(Just in Time)编译器的动态引导
在main.ts使用JIT模式
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
基于AOT(Ahead of Time)编译器的静态引导
在main.ts使用AOT模式
import { platformBrowser } from '@angular/platform-browser';
import { AppModuleNgFactory } from './app.module.ngfactory';
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
JIT和AOT编译器都会生产AppModuleNgFactory,只是方式不一样。JIT在浏览器,缓存里实时生产AppModuleNgFactory 。AOT编译器会生产一个物理文件app.module.ngfactory。AOT模式引入这个文件,然后启动:
import { AppModuleNgFactory } from './app.module.ngfactory';
生成app.module.ngfactory
@angular/compiler-cli提供了tsc和AOT两种编译器,把TypeScript转换为Javascript:
安装ngc
npm install @angular/compiler-cli typescript@next @angular/platform-server @angular/compiler