Vue 3.6 RC 的 Vapor Mode:100% opt-in,不支持 Options API 和 Suspense
Vue 3.6 已进入 RC 阶段(rc.1 于 2026-07-18,rc.9 于 2026-09-18),Vapor Mode 的目标特性集已经完成。3.6 同期还包含一次对 @vue/reactivity 的大重构,底层换成 alien-signals,响应式系统的性能与内存占用都有明显改善。
- 发布说明:
- CHANGELOG:
Vapor Mode 是什么
Vapor Mode 是 Vue 单文件组件(SFC)的一种新编译模式,目标是缩小基线产物体积、提升性能。它 100% opt-in,支持现有 Vue API 的一个子集,行为大体一致。
代价在于:凡是依赖 VNode 或组件公共实例代理($refs、instance proxy 这类)的特性,在 Vapor 组件里都不可用。第三方基准里,Vapor Mode 的性能与 Solid、Svelte 5 相当。
稳定性方面,Vapor Mode 在 3.6 RC 中已经功能完整,但官方目前推荐两种用法:在既有应用里局部使用(例如把某个性能敏感的页面用 Vapor 写),或者用 Vapor 全新构建小应用。
如何 opt-in
Vapor Mode 只支持 template-only 的 SFC,或使用 `` 的 SFC,不支持 Options API。
...
是 的简写。
也可以把 vapor 标记放在 template 上,让整个 SFC 走 Vapor 编译:
...
应用启动与 VDOM 互操作
纯 Vapor 应用用 createVaporApp() 启动:
import { createVaporApp } from 'vue'
import App from './App.vue'
createVaporApp(App).mount('#app')
这样不会引入 VDOM 运行时,基线体积可以大幅减小。
如果要在 createApp() 创建的 VDOM 应用里使用 Vapor 组件,必须安装 vaporInteropPlugin:
import { createApp, vaporInteropPlugin } from 'vue'
import App from './App.vue'
createApp(App).use(vaporInteropPlugin).mount('#app')
反过来,Vapor 应用实例也可以安装 vaporInteropPlugin,以便在内部使用 VDOM 组件,但这会引入 VDOM 运行时,抵消小体积的优势。
用 render 函数或 JSX 编写的组件仍然是 VDOM 组件,在 Vapor 中需要通过互操作使用。当前互操作覆盖标准 props、事件、slots,但没有覆盖所有边界情况;例如在 Vapor Mode 里使用基于 VDOM 的组件库时,很可能仍有粗糙边缘。
已知限制
Suspense 在纯 Vapor 模式下不支持,但可以在 VDOM 的 Suspense 内渲染 Vapor 组件。Vapor 支持的是 API 的一个子集——对受支持的子集,目标是行为一致。
最近几个 rc 的修复主要集中在可靠性:多根组件、异步 setup 与 slots 的 hydration 修复,以及更干净的 Vapor 与 VDOM 组件互操作;另有 KeepAlive、Teleport、Transition 等边界修复。