Angular Ivy下ng build的JIT与默认AOT模式冲突疑问
Angular Ivy与JIT/AOT编译的共存逻辑
先澄清一个关键误解
Angular 9之后把Ivy设为默认渲染引擎,但Ivy本身同时支持JIT和AOT两种编译模式,不是说用了Ivy就只能用AOT。你之前查到的ng build --dev uses JIT是旧版View Engine时期的说法,放到Ivy时代已经有变化了。
Ivy环境下JIT和AOT的实际情况
- 开发模式下(
ng build --dev或者直接ng build,默认就是开发配置),确实会用JIT,但这是Ivy专属的JIT编译器,不是旧版那套。Ivy的JIT做了不少优化,开发时热重载、改代码即时预览的体验比之前更好,编译速度也更快。 - 生产模式(
ng build --prod)默认用AOT,这是因为AOT在构建阶段就把模板转成了JS代码,打包体积更小、运行效率更高,适合生产环境。而且Ivy的AOT相比旧版也做了增量编译、体积优化这些升级。
为什么二者不冲突?
Ivy从设计之初就兼容两种编译时机:
- JIT是浏览器运行时编译组件模板,Ivy的JIT编译器直接适配自身的组件结构,不需要先转成旧版的视图代码,能直接和Ivy的渲染逻辑对接。
- AOT是构建阶段提前编译模板,生成的代码也是针对Ivy引擎优化过的,和JIT模式共享核心的组件逻辑,只是把编译步骤从浏览器端移到了构建时。
说白了,Ivy是负责最终渲染的底层引擎,JIT/AOT是选择“什么时候编译模板”——一个在运行时,一个在构建时,二者是互补的模式,根本不存在冲突。
内容的提问来源于stack exchange,提问作者Frederick Scott Smith
相关产品推荐
相关产品推荐

