在 Angular 中使用 JIT 编译比使用 AOT 有什么优势吗?

Wou*_*pen 4 angular angular-aot angular-jit

角文档指定几个原因支持JIT的使用AOT编译:

  • 更快的渲染
  • 更少的异步请求
  • 较小的 Angular 框架下载大小
  • 更早地检测模板错误
  • 更好的安全性

但是,在寻找使用 JIT 的参数时,我没有找到。此外,从 Angular 5.2 升级到 Angular 8 后,我在运行开发构建(使用 JIT)时突然遇到一个奇怪的错误。错误是:

ERROR in ./src/app/shared/app-configuration/shared/app-configuration.model.ts 22:16-35
"export 'IMyComponents' was not found in '@mycompany/mypackage'
Run Code Online (Sandbox Code Playgroud)

运行产品构建(使用 AOT)时,一切正常。这让我感到惊讶,因为我从未遇到过prod 构建成功dev 构建失败的 Angular 编译问题。

所以我的假设是 JIT 只适用于开发构建(即速度)。添加--aot标志可以安全地完成,没有任何问题。或者我错过了什么?

小智 7

没错,Angular 提供了两种绑定应用程序的方法:

即时 (JIT),它在运行时在浏览器中编译您的应用程序。(当你跑步时ng serve

  • 在浏览器中编译
  • 每个文件单独编译
  • 无需在更改代码后和重新加载浏览器页面之前构建
  • 适合当地发展

Ahead-of-Time (AOT),它在构建时编译您的应用程序。(当你跑步时ng serve --aot=true

  • 由机器自己编译,通过命令行(更快)
  • 所有代码编译在一起,在脚本中内嵌 HTML/CSS
  • 无需部署编译器
  • 适用于生产构建

默认情况下,带有 --prod 元标志 (ng build --prod) 的 ng build 命令使用 AOT 进行编译。

Angular Ahead-of-Time (AOT) 编译器在浏览器下载和运行代码之前的构建阶段将您的 Angular HTML 和 TypeScript 代码转换为高效的 JavaScript 代码。在构建过程中编译您的应用程序可在浏览器中提供更快的渲染。

由于JIT在运行时编译您的应用程序,它可以优化编译并仅构建必要的代码。所以在开发模式下,通常使用 JIT 来节省完整构建的时间。使用 JIT 编译时间会更快。

AOT优化了运行速度,但编译时间较长,所以在生产中使用比较普遍。AOT 还将优化您的应用程序的大小,因为所有文件都将在运行之前进行编译。