[译2019]是时候选择 Ivy 的兼容性预览了!
我们正在寻找愿意尝试新事物(有一些粗糙的边缘)并愿意与我们分享他们的经验的开发人员。如果您有兴趣,请按照以下步骤操作,并让我们知道您遇到了哪些问题。

此预览版主要旨在验证向后兼容性,因为性能和捆绑包大小的改进仍在进行中。
该计划是确保大多数 Angular 应用程序在没有重大更改的情况下继续工作,然后专注于利用底层框架的改进。
目前状态
通过 Ivy 的向后兼容性,我们已经实现了重要的稳定性里程碑。根据我们对 Google 内部数千个测试套件的测试(97% 的测试套件在 Google 通过),我们有理由相信大多数应用程序无需更改整个生态系统即可运行。我们正在解决几个已知问题,但我们预计还会有很多较小的问题需要解决。
现在我们已经达到了这一里程碑,我们需要您的帮助来识别和报告这些问题。选择预览版,尝试一下,然后让我们知道有什么问题。
对于向我们报告的问题,我们将采取三项措施:
- 修复它们– 只要有可能,我们希望使用此输入来解决向后兼容性问题。
- 承认它们– 报告的一些问题将来自依赖于未指定行为或不属于我们公共 API 的行为的应用程序。我们可能无法恢复这些更改,但我们希望了解并帮助开发人员确定他们是否遇到了其中之一。
- 自动化它们——如果我们在整个生态系统中发现任何大规模问题或模式(例如流行原理图编写的依赖项或有问题的代码),我们希望构建原理图和TSLint规则来自动化迁移。
性能和捆绑包大小如何?
我们仍在致力于改进包大小和运行时性能。当您今天更新时,您还不会看到所有这些好处。
我们目前看到生成的代码和 Hello World 应用程序更小,但在某些情况下 Angular 本身更大。以下是我们从应用程序升级到 Ivy 中看到的一些早期结果:
ng new my-app @ 8.1.0-next.1
Before Ivy
Main Bundle (135 KiB)
With Ivy Preview
Main Bundle (122 KiB)
Real World Angular @ 8.1.0-next.1
Before Ivy
Main Bundle (358 KiB)
Lazy Chunks (7.7–34 KiB)
With Ivy Preview
Main Bundle (400 KiB)
Lazy Chunks (3.3–27 KiB)
我们现在正在努力减少框架大小,以便在将 Ivy 设为默认值之前,几乎在每种情况下都减少了实际应用程序的捆绑包大小。由于我们提供了新的引导方式,这将从您的主包中剔除更多 Angular,因此还可能带来额外的好处。
随着我们越来越接近为所有应用程序默认启用 Ivy,我们将在接下来的几个月中发布更多有关实际应用程序的性能和捆绑包大小里程碑的公告。
今天我应该看到什么?
您的应用程序应该像现在一样构建和运行。您会注意到新编译器和指令集带来的以下好处:
- 包大小的微小改进 –
ng new
缩小了 10%,生成的代码大小应该减少约 25% - 更好的重新编译性能——增量编译,AOT模式下重新构建速度提高40%
- 更好的测试性能——在 Angular 中,我们发现框架单元测试速度提高了 1.5 倍, Material单元测试速度提高了 2.7 倍,Material 单元测试中的内存使用量下降了 81%
- 更多可调试指令 – 向 HTML 添加断点并逐步渲染模板,并且更轻松地调试更改检测,因为您可以在堆栈跟踪中单步执行模板函数并查看当前位置
我们还修复了许多长期存在的错误,改进了令人困惑的行为,并解决了一些性能问题。
- 类绑定总是覆盖其他类( 7289 )
- ContentChildren查询选择主机节点( 10098 )
- 查询的解析时间不一致(21800、25961 )
- 后代标志工作不一致(14769、27504 )
- 对预计的分离组件仍在运行更改检测 ( 21324 )
- 本地模板引用行为不一致/令人困惑
- 不再需要将组件添加到入口组件列表中 ( 28826 )
我如何选择加入?
我们在这里发布了指南:https: //angular.io/guide/ivy
每当使用 Ivy 时,你应该始终从 npm 运行最新版本的 Angular(标记为next
)。我们将在未来几个月内频繁进行更改。您可以使用 ng-update 获取最新版本,如下所示:
ng update @angular/core --next
使用最新版本后,更新src/tsconfig.app.json
以在顶级angularCompilerOptions
键下包含"enableIvy": true
。
当您运行ng build
时,我们将对您的 node_modules 文件夹进行 Angular 兼容性编译( ngcc
),并将所有元数据文件更新为我们可以转换为 Ivy 指令的格式。
给我们反馈
我们正在迅速接近这样一个未来,即 Ivy 的优势自动且普遍适用于所有开发人员,并且 Ivy 项目已得出结论。同时,打开一个问题,或联系devrel@angular.io ,向我们提供有关您选择加入预览体验的反馈。
文章来源地址:https://blog.angular.dev/its-time-for-the-compatibility-opt-in-preview-of-ivy-38f3542a282f