在Angular中使用JIT编译而不是使用AOT有什么优势?

时间:2019-06-28 07:30:06

标签: angular angular-aot angular-jit

Angular docs指定了使用AOT编译来支持JIT的几个原因:

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

但是,当寻找使用JIT的参数时,我什么也没找到。 此外,在从Angular 5.2升级到Angular 8 之后,在运行 dev 构建(使用JIT)时,我突然收到一个奇怪的错误。 错误是:

ERROR in ./src/app/shared/app-configuration/shared/app-configuration.model.ts 22:16-35
"export 'IMyComponents' was not found in '@mycompany/mypackage'

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

所以我的假设是JIT仅适用于开发版本(即速度)。并且可以安全地添加-aot 标志,而不会出现任何问题。 还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

您是对的,Angular提供了两种方法来绑定您的应用程序:

即时(JIT),可在运行时在浏览器中编译您的应用。 (当您运行ng serve时)

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

提前(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还将优化您的应用程序的大小,因为所有文件都将在运行之前进行编译。

相关问题