首页 游戏 软件 资讯 排行榜 专题
首页
前端开发
Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

热心网友
48
转载
2026-04-24

Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

Patch 的核心目标:高效更新 DOM

简单来说,Vue 的 Patch 过程干的就是一件“聪明事”:它拿着新旧两份虚拟节点(VNode)清单,只去更新真实 DOM 里真正变了的那部分,而不是不管三七二十一,把整棵树推倒重来。这套机制背后的功臣,是 Vue 2 时代的双端 Diff 算法,以及 Vue 3 中性能更优的快速 Diff 算法,两者共同确保了更新既快又准。

VNode 是什么?它是 Patch 的输入基础

在深入 Patch 之前,得先搞清楚它处理的是什么原料——VNode。你可以把它理解成一份用 Ja vaScript 对象写成的“施工蓝图”,里面详细描述了真实 DOM 节点的所有信息:标签名、属性、子节点、关键的 key 值,甚至是文本内容。比如下面这个对象:

{
  tag: 'div',
  data: { class: 'box' },
  children: [{ text: 'Hello' }]
}

组件第一次挂载时,render 函数会生成这份初始“蓝图”;当数据变化触发重新渲染,一份新的“蓝图”就诞生了。而 Patch 要做的,就是对比这两份新旧蓝图,找出差异并指挥 DOM“施工队”精准作业。

Patch 的主流程:从根节点开始递归更新

当调用 patch(oldVNode, newVNode) 这个核心函数后,整个更新引擎便按一套清晰的逻辑启动:

立即学习“前端免费学习笔记(深入)”;

  • 场景一:首次挂载。 如果旧节点是空的(比如初次渲染),那就没什么好比的,直接根据新 VNode 的蓝图,调用 createElm 创建真实的 DOM 元素并插入到容器中。
  • 场景二:组件卸载。 如果新节点是空的,意味着组件该退场了。这时会调用 removeVNode,卸载旧节点并移除其对应的 DOM 元素。
  • 场景三:同类型节点更新(核心)。 如果新旧节点是同一类型的元素(标签和 key 都相同),那就进入了真正的“打补丁”环节(patchVNode)。这个过程会更新节点的属性、处理事件监听器,并递归地对比它们的子节点列表。
  • 场景四:节点类型突变。 如果节点类型都变了(比如从 div 变成了 span),那就没有比对的必要了。Vue 会直接销毁旧 DOM,然后创建全新的 DOM 节点替换上去。当然,这种操作开销较大,在编写代码时应尽量避免。

子节点 Diff:关键在 key 和双端策略

当新旧 VNode 都拥有子节点时,真正的挑战来了。Vue 自然不会傻傻地逐个遍历比对,而是用上了更智能的策略:

  • key 是精准定位的“身份证”。 如果没有 key,Vue 会采用一种“就地复用”的策略,这可能导致元素内部状态(如表单输入值)出现错乱。而有了 key,Vue 就能像查身份证一样,精准识别出哪些节点是移动了、新增了还是被删除了。
  • Vue 2 的双端 Diff:四指针协同作业。 这种算法会同时从新旧子节点数组的头(oldStart, newStart)和尾(oldEnd, newEnd)四个位置开始比对,通过头尾交叉比较,尽可能减少遍历和 DOM 操作的次数。
  • Vue 3 的快速 Diff:效率再升级。 这是 Vue 3 的一项核心优化。它会先跳过新旧列表头部和尾部完全相同的节点(处理公共前后缀),然后对剩下的中间乱序部分,使用“最长递增子序列”算法来计算出一个最小的移动步骤。这套组合拳下来,列表更新的效率得到了大幅提升。

举个例子就明白了:假设子节点从 [A, B, C, D] 变成了 [D, A, B, E]。在 key 的帮助下,Diff 算法能精确判断出:D 被移动到了前面,C 被删除了,并且新增了一个 E。最终,它只会指挥 DOM 执行三次精准操作,而不是盲目地重新渲染整个列表。

来源:https://www.php.cn/faq/2341349.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

C++如何解析YAML中的空映射节点_Node::size判断用法【基础】
编程语言
C++如何解析YAML中的空映射节点_Node::size判断用法【基础】

C++如何解析YAML中的空映射节点:Node::size判断用法详解 处理YAML配置时,一个看似简单却极易踩坑的场景就是判断空映射节点。直接调用 Node::size() 来检查一个像 {} 或 foo: {} 这样的空映射,结果返回 0,这听起来很合理,对吧?但这里有个关键前提:你必须先确认这

热心网友
05.06
Node.js和Python进行连接与操作MongoDB的全面指南
数据库
Node.js和Python进行连接与操作MongoDB的全面指南

1 MongoDB简介 1 1 什么是MongoDB 在数据处理的世界里,数据库扮演着绝对的核心角色。当开发者们需要一个更灵活、更能适应现代应用快节奏变化的方案时,MongoDB便脱颖而出,成为最受欢迎的NoSQL数据库之一。简单来说,它是一个基于分布式文件存储的数据库,使用一种名为BSON(二进

热心网友
04.30
如何避免 Node.js 中回调函数执行时机不一致导致的事件监听失效问题
前端开发
如何避免 Node.js 中回调函数执行时机不一致导致的事件监听失效问题

深入解析“同步 异步混合回调”陷阱:从缓存失效到时序崩溃 在Node js的异步世界里,潜伏着一种设计上的“灰犀牛”——它看似无害,却能在特定条件下引发连锁反应,导致程序行为诡异、难以追踪。这就是同步与异步行为混合的回调函数。这类函数的核心风险在于:调用者完全无法预知回调是立即执行,还是被丢进事件循

热心网友
04.25
Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南
前端开发
Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南 Patch 的核心目标:高效更新 DOM 简单来说,Vue 的 Patch 过程干的就是一件“聪明事”:它拿着新旧两份虚拟节点(VNode)清单,只去更新真实 DOM 里真正变了的那部分,而不是不管三七二十一,

热心网友
04.24
mysql如何配置MHA高可用集群_安装Node节点与Manager监控脚本
数据库
mysql如何配置MHA高可用集群_安装Node节点与Manager监控脚本

MHA高可用集群部署:避开那些“坑”,让切换真正可靠 MHA高可用集群必须在所有MySQL节点安装mha4mysql-node,否则故障切换失败;Manager仅发指令,Node执行CHANGE MASTER TO等操作并提供关键脚本;SSH需root免密且禁用requiretty;配置文件缺use

热心网友
04.24

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

上海启动全球首颗光计算卫星研制 提升太空算力布局
科技数码
上海启动全球首颗光计算卫星研制 提升太空算力布局

上海启动全球首颗光计算卫星研制,其天基光计算具备抗辐照、低功耗特性,适应太空环境,可支撑在轨大算力任务。目前芯片太空验证已完成,全链条研制能力基本形成。产业面临成本与规模化挑战,需重构航天制造体系。长三角已成立创新联合体聚焦七大技术攻坚,上海将天基计算列为未来。

热心网友
05.19
百度成立AI模型委员会强化技术优势 苹果与OpenAI合作现裂痕
科技数码
百度成立AI模型委员会强化技术优势 苹果与OpenAI合作现裂痕

苹果与OpenAI合作因商业回报未达预期出现裂痕。腾讯地图推出AI骑手模式优化配送。百度成立模型委员会强化AI布局。荣耀将发布搭载云台系统的RobotPhone。Anthropic拟以9000亿美元估值融资。阿里发布智能体开发工作台Qoder1 0。千问APP接入药监局数据。发那科与英伟达深化合作,利用AI加速机器人开发。

热心网友
05.19
图书管理软件有哪些实用推荐与使用心得分享
游戏资讯
图书管理软件有哪些实用推荐与使用心得分享

面对海量书籍资源,数字化管理工具至关重要。小满图书管理侧重会员与库存管理,适合书店。库存管理通轻量化,支持多货品进销存。藏书馆兼具藏书管理与数字阅读功能。移动图书馆对接高校资源,提供学术服务。个人图书馆专注个人知识收集与创作。各类软件功能各异,需根据核心需求选择。

热心网友
05.19
流畅好用的英文朗读软件推荐
游戏资讯
流畅好用的英文朗读软件推荐

英文朗读软件能有效辅助学习。推荐几款特色应用:全能型《朗读器》操作简便;《朗读者》结合翻译与朗读;《英文翻译》支持长文朗读;《朗读大师》擅长图像识别与发音反馈;《中英文翻译》提供系统化学习路径。根据需求选择工具并坚持练习,可提升理解与发音能力。

热心网友
05.19
飞机票购买软件推荐 这几款订机票APP实用又划算
游戏资讯
飞机票购买软件推荐 这几款订机票APP实用又划算

飞机是远距离出行的高效选择,提前购票可锁定行程并享受优惠。主流购票平台包括飞猪旅行、携程旅行、航班管家、美团、飞行卡和去哪儿旅行。这些应用不仅提供机票预订,还整合酒店、景点门票、本地生活等服务,满足用户对价格、一站式规划或特定优惠的不同需求。

热心网友
05.19