【问题标题】:Is there any advantage of using JIT compilation in Angular in favor of using AOT?在 Angular 中使用 JIT 编译而不是使用 AOT 有什么好处吗?
【发布时间】:2019-11-10 03:55:32
【问题描述】:

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

  • 更快的渲染
  • 更少的异步请求
  • 较小的 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 标志可以安全地完成,没有任何问题。 还是我错过了什么?

【问题讨论】:

  • 使用 JIT 进行开发,使用 AOT 进行生产构建

标签: angular angular-aot angular-jit


【解决方案1】:

你说得对,Angular 提供了两种绑定应用程序的方法:

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

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

Ahead-of-Time (AOT),在构建时编译您的应用。 (当你运行ng serve --aot=true

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

带有 --prod 元标志的 ng build 命令(ng build --prod)默认使用 AOT 编译。

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-23
    • 2018-09-23
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2023-04-02
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多