【发布时间】:2016-09-13 07:23:05
【问题描述】:
Angular 2 带有一个名为 Ahead of Time (AoT) 的新功能。但是读了一些之后,我仍然无法真正理解它。它是如何工作的?它将如何带来更好的性能?它与 JIT 有何不同?
谢谢。
【问题讨论】:
标签: javascript performance angular
Angular 2 带有一个名为 Ahead of Time (AoT) 的新功能。但是读了一些之后,我仍然无法真正理解它。它是如何工作的?它将如何带来更好的性能?它与 JIT 有何不同?
谢谢。
【问题讨论】:
标签: javascript performance angular
Angular 在模块、指令、管道上的视图和装饰器中使用声明式绑定,这些模块、指令、管道需要由浏览器中的 JS 解释以执行其预期用途。
离线模板编译器用生成的静态代码替换声明性绑定和装饰器。
这使得 Angular2 组件的实例化和初始化更快,因为 JS 要做的工作更少。在将应用程序提供给客户端之前,已经完成了组件的“编译”。
如果您不使用在运行时需要它的其他功能,则可以省略 platform-browser-dynamic 并且根本不需要将其加载到浏览器中。
有一些讨论是否生成的代码不会超出浏览器动态平台的大小,但据我所知,Angular2 团队进行了大量试验和基准测试以确保最佳性能。
来自 AoT 食谱
Angular 组件由标准 html 和 Angular 的混合组成 语法(例如
ngIf、ngFor)。
ngIf和ngFor等表达式是 Angular 特有的,因此浏览器无法直接执行它们。在浏览器可以渲染应用程序之前,Angular 特定的代码和模板必须转换为常规的可执行文件 JavaScript。我们将此步骤称为编译。
默认情况下,编译由浏览器在运行时执行,在 所谓的即时编译(JIT)。它被称为“刚进 时间”,因为编译在应用程序加载时即时进行。
JIT 编译的缺点是运行时性能损失。 由于编译步骤,视图需要更长的时间来呈现。它也是 迫使我们下载 Angular 编译器和我们的应用程序 代码,因为我们在运行时需要编译器。
【讨论】: