当前位置: 技术文章>> 我们所知道的关于 Vue 3 的 Vapor Mode

文章标题:我们所知道的关于 Vue 3 的 Vapor Mode
  • 文章分类: 前端
  • 19622 阅读

什么是蒸汽模式?

蒸汽模式是受 Solid.js 启发的一种新的替代编译策略。它旨在通过将代码编译为更高效的 JavaScript 输出来提高应用程序的性能。

在应用级别使用时,您可以完全删除虚拟 DOM,从而减小应用的捆绑包大小。

 好处

性能更强

使用更少的内存

需要较少的运行时支持代码。

Solid.js 有一个与 Vue 非常相似的反应式系统,它们都在响应式系统中使用代理,并具有基于读取的自动跟踪。这就是为什么 Vue 可以实现与 Solid.js 类似的编译策略。

蒸汽模式如何工作?

给定相同的单个文件组件,Vapor 模式将能够将其编译为性能更高的 JavaScript 输出。.vue

为了优化最佳性能,Vapor 模式将只支持 Vue 功能的一个子集,这些功能是新的组合式 API 和 SFC,这是 Vue 3 编写应用程序的新默认方式。 阅读更多关于 Vue 的年度回顾。.vue<script setup>

目前的方法是什么?

目前,Vue 采用混合 VDOM/Compiler 方法。编译器获取 SFC 的模板,对其进行分析并将 a 馈送到虚拟 DOM。

这种编译器告知的虚拟 DOM 方法允许 Vue 在执行 DOM 操作时比 Svelte 4 等无 V-DOM 的工具表现得更好。

React / Svelte / Vue Benchmark

你的眼睛没有欺骗

Vue 3 目前的表现优于 Svelte 和 React。pic.twitter.com/E6H4OfqGp2

&mdash;:icarus.gk (@icarusgkx) 2023年8月21日

如何使用蒸汽模式?

在组件级别。

您将能够使用文件名后缀启用它。.vapor

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

* 注意

最初,蒸汽模式可以从集成到 vDOM 中的纯蒸汽树开始,然后从那里提高它们之间的互操作性。

在应用级别。

以这种方式编译的应用程序将能够完全删除虚拟 DOM 运行时,并且仅包含@vue/反应性和蒸汽模式运行时帮助程序,这些助手非常轻量级。以这种方式编写的应用程序的基线大小为 ~6kb,而当前带有 vDOM 的基线 Vue 3 应用程序的基线大小为 ~50kb。这减少了 88%!

要点

这是一项可选功能,不会影响现有代码库。

如果你决定将你的 Vue 版本升级到包含 Vapor Mode 的版本,这不会引入任何与 Vapor Mode 相关的重大更改。

Vapor 模式将能够与 vDOM 组件进行互操作。

因此,如果您想使用任何使用虚拟 DOM 的库,例如 Vuetify,Vapor 模式仍然能够支持它。

蒸汽模式级

虽然仍在开发中,但我们有一些关于它的新闻:

第 1 阶段:核心功能的运行时

所有 Vapor 运行时助手都引入了,这些助手基本上是帮助生成代码的代码。这个阶段差不多完成了。

目标

支持核心指令 () 和组件树。v-on, v-if, v-for, etc...

验证性能假设。

与现有 SSR 输出的水化兼容性。

第 2 阶段:核心功能的编译器

这里的主要重点是确保我们可以采用 Vue 模板或 JSX 并将其转换为运行时可以处理的东西。

目标

共享代码生成 IR(中间表示)

JSX AST / 模板 AST - IR - 蒸汽模式代码

为什么要进行中间表示?

由于没有虚拟 DOM,Vapor Mode 的编译过程消除了手动创建渲染函数的需要。但是,一些用户需要 JavaScript 的广泛灵活性。在这种情况下,可以将 JSX 编译成 Vapor 代码。

模板和 JSX 都经历了相同的中间表示的转换,最终编译成 Vapor 代码。

第 3 阶段:集成

Vue 旨在使 Vapor 可以无缝嵌入到您现有的应用程序中,而无需对您当前的设置进行任何修改。您可以灵活地在组件级别选择加入,从而逐步将其引入应用程序的子集或专门引入性能关键领域。

目标

对独立 Vapor 应用程序的工具支持

在现有应用程序中运行 Vapor 组件

在 Vapor 中运行 vDOM 组件

第 4 阶段:功能奇偶校验

在最初的版本中,Vapor Mode 将只提供基本的核心功能,而一些更辅助的功能,如 、 、 将在 Vue 团队整理完之前的所有目标后实现。<Transition /><KeepAlive /><Teleport />Suspense

总结

Vapor Mode 是 Vue.js 正在开发的一种新的面向性能的编译策略

它将使用相同的模板(假设你使用的是组合 API,并生成性能更高的输出。<script setup>

它将是可逐步采用的 - 您将能够选择为单个组件或整个应用程序启用蒸汽模式。

最终目标是在同一应用程序中自由混合 Vapor 和非 Vapor 组件而不会出现问题,但是,Vapor 模式可以从集成到 vDOM 中的纯 Vapor 树开始,然后从那里提高它们之间的互操作性。


推荐文章