Angular2 Ahead of Time(AoT)编译是如何工作的?

时间:2016-09-13 07:23:06

标签: javascript performance angular

Angular 2带有名为Ahead of Time(AoT)的新功能。但经过一些阅读,我仍然无法真正理解它。它是如何工作的?它将如何带来更好的性能?它与JIT有什么不同?

谢谢。

1 个答案:

答案 0 :(得分:6)

Angular在模块,指令,管道中的视图和装饰器中使用声明性绑定,需要JS在浏览器中解释它们的目的。

离线模板编译器通过生成的静态代码替换声明性绑定和装饰器。

这使得Angular2组件的实例化和初始化更快,因为JS的工作量较少。 "汇编"在将应用程序提供给客户端之前,该组件已经完成。

如果您未在运行时使用其他需要它的功能,则可以省略platform-b​​rowser-dynamic,并且根本不需要将其加载到浏览器中。

有一些讨论是否生成的代码不会超出浏览器动态平台的大小,但据我所知,Angular2团队进行了大量的实验和基准测试以确保最佳性能。

来自AoT食谱

  

角度组件由标准html和Angular组合而成   语法(例如ngIfngFor)。

     

ngIfngFor之类的表达式特定于Angular,因此浏览器无法直接执行它们。

     

在浏览器呈现应用程序之前,必须将Angular特定代码和模板转换为常规可执行文件   JavaScript的。我们将此步骤称为编译。

     

默认情况下,浏览器在运行时执行编译   什么叫做Just in Time编译(JIT)。它被称为"只是在   时间"因为编译会在应用程序加载时动态发生。

     

JIT编译的缺点是运行时性能损失。   由于编译步骤,视图需要更长的渲染时间。它也是   迫使我们下载Angular编译器和我们的应用程序   代码,因为我们将在运行时需要编译器。