当前位置: 首页 > news >正文

Vue 2与Vue3.diff算法比对

本文聚焦Diff算法核心原理、执行步骤、核心源码实现与更新机制对比。

一、前置共识:Diff在整个更新机制中的位置

Vue的更新机制是一条完整链路,Diff只是其中一环,先把整条链路讲清楚:

数据变化 → 触发响应式通知 → 组件重新render → 生成新VNode树 → Diff对比新旧VNode → Patch更新真实DOM

核心原则:同层比较,不跨层。完整树对比复杂度O(n³)不可用,Vue和React都做了同层对比的工程妥协,将复杂度降至O(n)。Diff算法最复杂的场景,就是同层子节点列表的对比,这也是Vue2和Vue3差异最大的地方。


二、Vue2 Diff算法:双端比较法(双指针)

2.1 算法原理

Vue2采用双端比较策略,用四个指针分别指向新旧列表的首尾,每一轮优先对比两端的节点,命中则直接复用并移动指针;四次都没命中时,再用新列表头部节点去旧列表中遍历查找。

2.2 四个核心指针

旧列表:oldStartIdx → ... ← oldEndIdx 新列表:newStartIdx → ... ← newEndIdx

2.3 执行步骤(逐轮循环)

每一轮循环按以下顺序做4次比较:

第1次:旧头 vs 新头

  • 相同:两个头指针都后移一位,进入下一轮
  • 不同:继续下一次比较

第2次:旧尾 vs 新尾

  • 相同:两个尾指针都前移一位,进入下一轮
  • 不同:继续下一次比较

第3次:旧头 vs 新尾

  • 相同:旧头节点移动到旧尾后面,旧头指针后移,新尾指针前移
  • 不同:继续下一次比较

第4次:旧尾 vs 新头

  • 相同:旧尾节点移动到旧头前面,旧尾指针前移,新头指针后移
  • 不同:进入兜底查找

兜底:遍历查找

  • 拿新头节点的key,去旧列表中遍历找相同key的节点
  • 找到:把该节点移动到旧头前面,旧列表对应位置标记为null,新头指针后移
  • 没找到:新建节点插入到旧头前面,新头指针后移

循环终止条件:旧列表或新列表的头指针超过尾指针(有一方先遍历完)

收尾处理

  • 旧列表先走完:新列表剩余的节点全部新增
  • 新列表先走完:旧列表剩余的节点全部删除

2.4 流程图

<
http://www.jsqmd.com/news/1220004/

相关文章:

  • 学完递归,学二叉树的迭代遍历
  • GHelper终极指南:如何用轻量级工具彻底掌控华硕笔记本性能
  • 嵌入式Linux开发新范式:TI主线内核策略解析与实战指南
  • Ryujinx:当C遇上Nintendo Switch——现代模拟器架构的深度解析
  • 2026年7月亨得利中国区售后服务网络更新优化 全国60+门店地址及电话汇总 - 亨得利客户服务中心
  • Ventoy终极指南:免费创建多系统启动盘,告别反复格式化
  • 如何用SRWE窗口编辑器解锁Windows应用的终极显示自由?
  • 平顶山卖金不踩坑!6家靠谱黄金回收店盘点,覆盖全市10个区县,上门秒到账! - 清奢黄金上门回收
  • AM261x UART CIR模式配置详解:红外通信调制频率、占空比与接收难题破解
  • Alacritty-Themes社区指南:如何参与开源贡献的5个简单步骤
  • 大白话完整梳理:嵌入向量到底是什么、怎么用
  • 革命性社交媒体图文工具:Guizang Social Card Skill完全指南 — 小红书与公众号封面一键生成
  • Wav2Lip UHQ技术架构解析:AI唇形同步的深度优化方案
  • 【AI数字人直播落地实战指南】:0代码搭建高转化直播间,3天上线+92%复购率提升路径
  • 如何在5分钟内用AI制作专业短视频?Pixelle-Video的完整免费指南
  • Windows 11系统优化终极指南:如何用Win11Debloat让你的电脑更快更干净
  • 2026年亨得利中国区售后服务网络更新优化,全国唯一售后热线以及线下网点地址 - 亨得利客户服务中心
  • SegmenTron模型评估全流程:Mean IoU计算与性能优化实战
  • Containerum团队协作功能完全指南:权限管理与项目协作的10个实用技巧
  • 2026宜兴降温冰块公司复购Top榜:良臣制冰厂凭什么稳居第一? - 热点咨讯
  • 自动化构建docker-alpine-java镜像:generate_dockerfiles.sh脚本完全指南
  • 【Copilot公式性能黑箱】:为什么你的$#prompt响应延迟高达2.4秒?权威调优白皮书首次公开
  • Cursor移动端适配实战手册(2024最新RN+Flutter双框架兼容白皮书)
  • 深入解析EDMA_TPTC:命令分段与TR流水线机制及性能调优实战
  • BlockLauncher脚本管理器架构剖析:JavaScript与C++游戏引擎的深度集成
  • 如何使用Formsmd创建交互式表单:从安装到部署的完整指南
  • USBIP-Win:企业级USB设备网络共享解决方案,实现跨平台远程设备管理
  • 2026年7月最新酒店帐篷厂家推荐榜单TOP5雅奢领衔盘点 - 优企名品
  • React-PDF视觉优化指南:5个技巧打造专业级PDF文档
  • Product Hunt 每日热榜 | 2026-07-17