尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Vue 2与Vue3.diff算法比对

Vue 2与Vue3.diff算法比对
📅 发布时间:2026/7/19 13:36:35

本文聚焦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 流程图

是

否

是

否

是

<

相关新闻

  • 学完递归,学二叉树的迭代遍历
  • 2FAS Auth iOS应用完全解析:从零开始构建你的双因素认证安全堡垒
  • 平顶山卖金不踩坑!6家靠谱黄金回收店盘点,覆盖全市10个区县,上门秒到账! - 清奢黄金上门回收

最新新闻

  • Loop:用视觉化操作重新定义macOS窗口管理体验
  • day01-FastAPI初识(补充day0.5)以及Tortoise-ORM
  • 计算机教材内容策划与写作的安全规范
  • C++20编译器实践:用现代特性重写C编译器cci的架构与实现
  • 短信验证码攻击:安全威胁与防护策略
  • 《派出你的AI同事:WorkBuddy案例实战》000:开篇——从“自己用”到“派出去”

日新闻

  • 百达翡丽官方服务项目及价格查询|维修地址与电话权威信息通告(2026年7月最新) - 百达翡丽服务中心
  • 2026年药食同源冲泡饮品哪家好:衡身堂三伏天内调外养 - 晚香时候
  • 芝柏官方更换原装表带价格查询|详细地址与24小时客服电话权威信息公告(2026年7月最新) - 亨得利官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号