Vue Vapor Mode来了,不用虚拟DOM也能跑

更新日期: 2026-04-24 阅读: 20 标签: dom

前端的工具链在用Rust重写,服务端组件也在推。底层的东西正在被一点点换成编译时干的活,运行时越来越轻。这次轮到Vue了。

Vue团队正在做一个叫Vapor Mode的东西,它不是修修补补,而是要把Vue的渲染机制整个重写一遍。


Vapor Mode是什么

简单说,Vapor Mode就是不用虚拟DOM,直接在编译阶段就把组件变成操作真实DOM的代码。

它不是下一个版本,是一个可选的新渲染模式。你可以理解为给Vue换了一台发动机,原来的车还能开,但新发动机更省油更有劲。

Vapor Mode覆盖的东西挺全:响应式系统、组件渲染、模板编译、更新机制,全都重写了。


它跟普通模式有什么区别

普通Vue的工作流程是这样:数据变了,触发setter,通知依赖,然后虚拟DOM去算哪里变了,最后更新真实DOM。每一步都有开销。

Vapor Mode不一样:数据变了,直接去更新对应的那一个DOM节点。中间没有虚拟DOM,没有diff算法,也不需要在运行时用Proxy收集依赖。

打个比方:普通模式像是你告诉管家屋里哪里要调整,管家记下来,然后拿着图纸对照一遍再去动手。Vapor Mode是你直接走过去把东西摆好。


性能能快多少

官方跑过基准测试,一万个简单组件:

  • 初始渲染从125毫秒降到32毫秒,快了近4倍

  • 单个属性更新从8毫秒降到0.8毫秒,快10倍

  • 列表重排序从180毫秒降到5毫秒,快36倍

为什么这么快?因为不需要每次更新都跑一遍diff算法,也不需要生成虚拟DOM树。编译的时候就知道哪个数据对应哪个DOM节点,运行时直接改。

编译生成的代码大致是这样:拿到标题和计数的值,分别绑定到h1和p标签上。点击按钮的时候直接改count,同时更新p标签的文字。没有中间商赚差价。


怎么用

用法几乎没区别,只是在script setup后面加一个vapor属性就行。

原来怎么写现在还怎么写,ref、computed、watch这些都照常用。Vue Router和Pinia也兼容,Vapor组件里可以正常用,也能跟普通组件混着用。


现在能用吗

部分能用。Vue 3.5已经带了Vapor Mode的核心功能,生态兼容也做好了。但v-for、v-if这些指令的复杂场景还在完善,调试工具也在改进。

如果你的应用对性能要求高,比如高频更新的列表、移动端低配设备、数据可视化实时图表,可以试试看。普通的管理后台用不用差别不大。


一个更大的趋势

Vue 2用虚拟DOM解决了跨浏览器兼容的问题。Vue 3用组合API解决了代码复用的问题。Vapor Mode要解决的是极致性能的问题。

它不会明天就取代普通模式,Vue团队也说了是渐进升级。但这至少说明一件事:Vue的未来不只是框架升级,而是渲染器本身的升级。

有兴趣的可以去看官方RFC和Vue 3.5的发布说明。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13714

相关推荐

全面理解虚拟DOM,实现虚拟DOM

DOM是很慢的,其元素非常庞大,页面的性能问题鲜有由JS引起的,大部分都是由DOM操作引起的。虚拟的DOM的核心思想是:对复杂的文档DOM结构,提供一种方便的工具,进行最小化地DOM操作。

js实现DOM遍历_遍历dom树节点方法

遍历DOM节点常用一般用节点的 childNodes, firstChild, lastChild, nodeType, nodeName, nodeValue属性。在获取节点nodeValue时要注意,元素节点的子文本节点的nodeValue才是元素节点中文本的内容。

vue中使用ref获取dom对象

本文适用于所有使用 Vue 的开发人, 包括初学者。在阅读本文之前,你应该具备一些前提条件:Node.js 10.x或更高版本。在终端或命令提示符下运行 node -v 来验证你的版本;npm 6.7 或以上版本;代码编辑器;我强烈推荐 Visual Studio Code

getHTML() - 替代 innerHTML 的最佳方法

getHTML()为开发者提供了一种强大的方法来处理包含Shadow DOM的复杂DOM结构。虽然它有一些限制,但在处理现代Web组件和复杂UI时,getHTML()的优势是显而易见的。随着Web组件的普及,掌握getHTML()将成为前端开发者的重要技能。

vuejs2.0如何获取dom元素自定义属性值

设置定义属性值 :data-value=.., 2.直接获取 3.通过this.$refs.***获取 1.目标DOM定义ref值: 2.通过 【this.$refs.***.属性名】 获取相关属性的值: this.$refs.*** 获取到对应的元素 ...

HTML文档解析和DOM树的构建

浏览器解析HTML文档生成DOM树的过程,以下是一段HTML代码,以此为例来分析解析HTML文档的原理.解析HTML文档构建DOM树的理解过程可分为两个主要模块构成,即标签解析、DOM树构建

原生js获取DOM对象的几种方法

javascript获取DOM对象的多种方法:通过id获取 、通过class获取、通过标签名获取、通过name属性获取、通过querySelector获取、通过querySelectorAll获取等

关于DOM操作是异步的还是同步的相关理解

先列出我的理解,然后再从具体的例子中说明:DOM操作本身应该是同步的(当然,我说的是单纯的DOM操作,不考虑ajax请求后渲染等);DOM操作之后导致的渲染等是异步的(在DOM操作简单的情况下,是难以察觉的)

详解 HTML attribute 和 DOM property

在大多数的文章中,attribute 一般被翻译为“特性”,property 被译为“属性”。把结论写在最前面,如果你全都懂,后面就不用看了。当我们书写 HTML 代码的时候

JavaScript DOM事件模型

早期由于浏览器厂商对于浏览器市场的争夺,各家浏览器厂商对同一功能的JavaScript的实现都不进相同,本节内容介绍JavaScript的DOM事件模型及事件处理程序的分类。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!