【译】你不知道的 Vue3 蒸汽模式!

大家好,这里是大家的林语冰。

免责声明

本文属于是语冰的直男翻译了属于是,仅供粉丝参考,英文原味版请临幸 All we know about Vue 3's Vapor Mode...until now

蒸汽模式是什么鬼物?

蒸汽模式(Vapor Mode)是一种新型替代编译策略,灵感来源于 Solid.js。它旨在优化您的 app 性能,这诉诸于将您的代码编译为更高效的 JS(JavaScript)输出。

当在 app 层级使用时,您可以完全消灭虚拟 DOM,从而优化您的 app 打包体积。

优势

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

Solid.js 有一个和 Vue 雷同的响应性系统,它们都在响应式系统中使用了读取筑基的自动跟踪代理。这就是 Vue 可以实现与 Solid.js 类似的编译策略的原因。

蒸汽模式的工作机制

给定同款 .vue SFC(单文件组件),蒸汽模式能够将其编译为性能更高的 JS 输出。

为了优化最佳性能,蒸汽模式能且仅能支持一个 Vue 的功能子集,即全新的组合式 API 和诉诸 <script setup>.vue SFC ------ Vue 3 编写 app 的默认新方法。请临幸关于 Vue 年度回顾 的扩展阅读。

目前的方法是什么?

目前,Vue 诉诸虚拟 DOM/编译器混合方法。编译器获取 SFC 的模板,分析它然后反馈给虚拟 DOM。

当通过一个微小的外边距执行 DOM 操作时,这种 编译器通知的虚拟 DOM 的方法允许 Vue 比诸如 Svelte 4 这样的无虚拟 DOM 工具更优秀。

蒸汽模式的用户指南

组件级别。

您可以诉诸 .vapor 文件后缀来启动它。

终极目标是在同款 app 中自由混用蒸汽和非蒸汽组件。

📝 * 注意事项

最初,蒸汽模式可能从集成到虚拟 DOM 的仅蒸汽树(vapor-only tree)开始,然后从那里优化它们的交互性。

在 app 层级。

以此方式编译的 app 可以完全消灭虚拟 DOM 运行时,并且只包含极其 轻量的 @vue/reactivity 和蒸汽模式运行时辅助。以此方式编写的 app 的基线大小 约为 6 kb,反观诉诸虚拟 DOM 的 Vue 3 app 的基线大小目前约为 50 kb。这同比减少了 88%!🤯

划重点

  • 这是一个不会影响现存代码库的可选功能。 如果您决定将 Vue 升级到包含蒸汽模式的版本,这不会引入任何与蒸汽模式相关的破坏性更新。
  • 蒸汽模式可以和虚拟 DOM 组件交互. 因此,如果您想使用任何诸如 Vuetify 这样使用虚拟 DOM 的库,蒸汽模式仍可以支持它。

蒸汽模式阶段

虽然仍在开发中,但我们有若干关于它的资讯:

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

引入了所有蒸汽运行时辅助,这些辅助基本上是帮助生成代码的代码。此阶段基本码到功成了。

❇️ 目标

  • 支持核心指令(v-on, v-if, v-for, etc...)和组件树。
  • 证明性能假说。
  • 与现存 SSR 输出水合兼容。

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

此处的关注点在于确保我们可以使用 Vue 模板或 JSX,并将其转换为运行时可以处理的东东。

❇️ 目标

  • 共享代码生成 IR(Intermediate Representation,中间表示)
  • JSX AST/模板AST - IR - 蒸汽模式代码

为什么是中间表示?

由于莫得虚拟 DOM,蒸汽模式的编译过程消除了手动创建渲染函数的需求。虽然但是,某些用户需要 JS 的广义灵活性。在这种情况下,可以将 JSX 编译成蒸汽代码。

模板和 JSX 都要转换为同款中间表示,这最终编译为蒸汽代码。

第三阶段:集成

Vue 旨在使蒸汽无缝衔接到您现存的 app 中,而无需对当前设置进行任何修改。

您可以灵活地选择在组件级别植入,从而使您能够将其循序渐进地引入到 app 的子集或特定的性能关键区域。

❇️ 目标

  • 单独蒸汽 app 的工具支持
  • 在现存 app 中运行蒸汽组件
  • 在蒸汽中运行虚拟 DOM 组件

第四阶段:功能奇偶校验

在其初始版本中,蒸汽模式能且仅能提供必要的核心功能,而若干更辅助的功能,比如 <Transition /><KeepAlive /><Teleport />Suspense 将在 Vue 团队整理出之前的所有目标后实现。

完结撒花

  • 蒸汽模式是 Vue.js 开发中的一种面向性能的新型编译策略
  • 它将使用同款模板 (假设您使用的是 Composition API 和<script setup> ),并生成性能更高的输出。
  • 它可被渐进式采用 ------ 您将可以选择为单个组件或整个 app 启用蒸汽模式。
  • **终极目标是在同款 app 中自由混用蒸汽和非蒸汽组件,**而不会出现任何问题,虽然但是,蒸汽模式可能从集成到虚拟 DOM 的仅蒸汽树开始,然后从那里优化它们的交互性。

您现在收看的是前端开发系列,学废了的小伙伴可以点赞友情赞助本系列,我们礼拜天佛系拖更,欢迎关注和订阅最新动态。谢谢大家的彼芯,掰掰~

相关推荐
EMT15 分钟前
在 Vue 项目中使用 URL Query 保存和恢复搜索条件
javascript·vue.js
我是日安23 分钟前
从零到一打造 Vue3 响应式系统 Day 9 - Effect:调度器实现与应用
前端·vue.js
鹏多多1 小时前
深入解析vue的keep-alive缓存机制
前端·javascript·vue.js
用户516816614584117 小时前
Vue Router 路由懒加载引发的生产页面白屏问题
vue.js·vue-router
前端缘梦17 小时前
Vue Keep-Alive 组件详解:优化性能与保留组件状态的终极指南
前端·vue.js·面试
Simon_He18 小时前
这次来点狠的:用 Vue 3 把 AI 的“碎片 Markdown”渲染得又快又稳(Monaco 实时更新 + Mermaid 渐进绘图)
前端·vue.js·markdown
王同学QaQ1 天前
Vue3对接UE,通过MQTT完成通讯
javascript·vue.js
华仔啊1 天前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端
艾小码1 天前
告别Vue混入的坑!Composition API让我效率翻倍的3个秘密
前端·javascript·vue.js
光影少年1 天前
webpack打包优化
webpack·掘金·金石计划·前端工程化