Angular 2 AOT与JIT有效载荷比较

时间:2016-12-28 10:21:35

标签: javascript angularjs angular jit aot

我对Angular 2很新,所以如果我不准确的话,请纠正我。

在编译时我对Angular 1 vs 2的理解:

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

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

问题(可能):

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

2 个答案:

答案 0 :(得分:1)

回答问题"但是随着应用程序的增长,我认为这种差异开始减少并且可能会反转(是吗?!)" :

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

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

  

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

然而,使用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 Doc以获取View Engine更新。

答案 1 :(得分:0)

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

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

查看此链接,这是非常好的,涵盖了有关模块,上下文和编译的整个主题: http://blog.angular-university.io/angular2-ngmodule/

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