Vue 3 Vapor 模式

1,463 阅读3分钟

介绍了 Vue 3 的新编译策略 Vapor Mode,它将无虚拟 DOM,利用内置响应性系统提升性能。Vapor Mode 目前处于实验阶段,可以选择性地启用,且有望在同一应用中混合使用 Vapor 和非 Vapor 组件。未来,Vapor Mode 将逐步完善功能,提供更高性能的输出和更灵活的组件集成方式。今日前端早读课文章由 @CUGGZ 分享,公号:前端充电宝授权。

正文从这开始~~

在 2022 年的 VueConf 活动中,Vue 的作者尤雨溪首次提出了 Vapor Mode 的概念,这是一个受到 Solid 启发的编译策略,它打破了对虚拟 DOM 的依赖,转而充分利用 Vue 内置的响应性系统,带来了显著的性能提升。目前,Vapor Mode 已经推出了实验版本,可以在 steam-repl.netlify.app 上先行体验。

图片

下面就来看看 Vapor Mode 是什么,如何使用,以及它的未来!

Vapor Mode 概念

Vapor Mode 是一种正在试验中的编译策略,其灵感来源于 Solid。对于相同的 Vue SFC,与当前基于虚拟 DOM 的编译结果相比,Vapor Mode 能够生成性能更高、内存使用更少、运行时支持代码更少的 JavaScript 输出。它的目标是通过编译为更高效的 JavaScript 来提升应用的性能。当在应用级别使用时,Vapor Mode 可以完全去除虚拟 DOM,从而减小应用的包大小,进一步优化应用的性能。

图片

Vapor Mode 目前仍处于开发阶段,相关要点如下:

  • Vapor Mode 主要适用于对性能有高要求的场景。它作为一项可选功能,不会对现有代码库产生影响。
  • 开发者能够将 Vapor 组件子树无缝集成到现有的 Vue 3 应用中。理想情况下,我们希望在组件级别实现粒度选择,使 Vapor 组件和非 Vapor 组件能在同一个应用中自由混用。
  • 仅使用 Vapor 组件构建应用可以显著减少 bundle 中的虚拟 DOM 运行时,从而降低基准运行时大小。
  • 为了实现最佳性能,Vapor Mode 将仅支持 Vue 功能的一个子集。具体来说,Vapor Mode 组件将仅支持 Composition API 和 <script setup>。这个受支持的子集在 Vapor 和非 Vapor 组件之间具有相同的工作方式。

✅ 使用 Vapor Mode 的好处如下:

  • 性能更佳
  • 使用更少的内存
  • 需要更少的运行时支持代码。

Vapor Mode 期望实现的功能如下,目前还有一部分正在实现中:

图片

Vapor Mode 使用

在组件层面

可以使用 .vapor 文件名后缀来启用它。

图片

最终目标是在同一个应用中自由混合 Vapor 和非 Vapor 组件。

图片

注意:Vapor Mode 最初将仅使用 Vapor 树集成到 vDOM 中,并在此基础上逐步提高它们之间的互操作性。

在应用层面

图片

通过这种方式编译的应用程序将能够完全删除虚拟 DOM 运行时,只包含极为轻量级的 @vue/reactivity 和 vapor mode 运行时辅助程序。与当前使用虚拟 DOM 的 Vue 3 应用的基线大小(约 50KB)相比,这样编写应用的基线大小仅为约 6KB,实现了高达 88% 的压缩比!

关键点
  • 这是一项可选功能,不会影响现有的代码库。如果计划将 Vue 版本升级到包含 Vapor Mode 的版本,这不会引入任何与 Vapor Mode 相关的重大更改。
  • Vapor Mode 将能够与 vDOM 组件进行互操作。因此,如果希望使用像 Vuetify 这样的虚拟 DOM 库, Vapor Mode 仍然能够支持它。

Vapor Mode 未来

Vapor Mode 仍在开发中,目前正处于第三阶段。