【问题标题】:Angular 2 AOT vs JIT payload comparisonAngular 2 AOT 与 JIT 有效负载比较
【发布时间】:2017-05-12 14:41:01
【问题描述】:

我对 Angular 2 还很陌生,如果我不准确,请纠正我。

在编译器方面我对 Angular 1 vs 2 的理解:

在 Angular 1 中,编译器更加通用和动态,这意味着脏检查代码是运行在不同组件上的单个代码。然而,在 Angular 2 中,出于性能考虑,每个组件都将被编译为一个生成的代码,该代码处理该特定组件的绑定和脏检查。这意味着根据组件模板,更具体地说是绑定数量,生成的代码会变得更大。

当我们使用JIT时,这并不重要,因为这段代码不经过网络,是在浏览器中生成的。但是当使用 AOT 时,它将从服务器传输。

问题(可能):

当应用程序很小时,AOT 肯定会导致更小的负载,因为编译器不会被运送到浏览器。但是随着应用程序的增长,我认为这种差异开始减少并且可能会倒置(是吗?!)。但我没有量化的感觉。 对于中型或大型应用程序来说,这会是一个真正的问题吗?

【问题讨论】:

  • 另一个考虑是可以更好地压缩 AoT 有效负载(手头没有 AoT 构建来检查这一点)。

标签: javascript angularjs angular jit aot


【解决方案1】:

要回答“但是随着应用程序的增长,我假设这种差异开始减少并且可能会倒置(是吗?!)”:

是的,在一个非常大的应用程序上可以看到差异。

我在webpack starter github上问了一个类似的问题,引用答案:

您可能会注意到 build:prod:aot 中的主文件和块文件比 build:prod 中的大,这是完全正常的,因为 AOT 生成的代码更多。 AOT 中的总量较少,因为编译器不是捆绑包的一部分,您可以在供应商捆绑包的大小中看到它。 这也意味着随着应用程序的增长,AOT 将产生更大的代码,因为您添加了更多 AOT 生成的代码,但编译器大小是恒定的。 Angular 团队正在努力减少发出的代码,即将推出的功能之一是一个新的视图引擎,它将减少包大小但会稍微影响性能(这总是一个权衡)

不过,应用 AOT 的启动速度比 JIT 快得多。 请查看问题,似乎 angular2 团队已经意识到这一点并计划减少这种行为。

https://github.com/AngularClass/angular2-webpack-starter/issues/1520

在 angular2 团队方面要跟踪的问题:https://github.com/angular/angular/issues/14013

更新:现在使用 Angular 4 https://github.com/angular/angular/blob/master/CHANGELOG.md#view-engine

我们对 AOT 生成的代码的外观进行了更改。在某些情况下,这些更改应该会为您的组件生成的代码大小减少一半以上。阅读设计文档以了解 View Engine 更新。

【讨论】:

    【解决方案2】:

    解决方案是使用 LazyLoading 实际正确管理 AOT。

    要真正给出答案,会有问题,但现在我们有了管理它们的工具。延迟加载是我们无法轻易应用于 AngularJS 的解决方案。

    查看此链接,该链接制作精良,涵盖了有关模块、上下文和编译的整个主题: http://blog.angular-university.io/angular2-ngmodule/

    您也可以将两者结合起来并充分利用它: http://blog.assaf.co/angular-2-harmony-aot-compilation-with-lazy-jit-2/

    【讨论】:

    • 把 AOT 和 JIT 放在一起是没有意义的,关键是编译器的剪切,你说的不是。
    • 延迟加载编译器!我非常想念Jquery :) 我们在做什么? Angular 的本意是让事情变得更简单,现在我们必须想办法破解它才能工作。
    猜你喜欢
    • 2017-06-18
    • 2017-04-24
    • 2019-09-13
    • 2017-04-21
    • 2023-04-02
    • 2017-05-17
    • 2017-07-27
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多