当前位置:网站首页 > Vue.js开发 > 正文

vue2与vue3 diff(vue2与vue3 diff算法)



对于源码的阅读应该是建立在实际需要的过程中,这样才是科学的学习方式,不然一味地全盘阅读,先不说能不能读得完,这过程也是非常痛苦和枯燥。最近在应用虚拟列表的过程中发现vue3的更新方式给我造成了困惑,遂重温下vue2的diff算法,顺便学习下vue3的diff算法

说一下主要流程

  1. 对比key
  2. 对比tag
  3. 对比comment
  4. 对比是否同一个Input、
  5. 对比placeholder

遵循一个基本原则:

先优先处理好处理的边界情况,最后全量递归对比

处理边界情况

  1. 新节点存在文本节点的情况下,当旧节点的子节点和新节点的子节点都存在的情况下,开始diff算法(也就是③),等会讲。
  2. 当旧节点没有子节点的情况下,检查新节点子节点的key的重复性.如果旧节点存在文本节点,则清空文本节点。然后批量将新节点的子节点添加到elem后面
  3. 如果旧节点存在子节点,则移除所以的子节点。
  4. 如果新节点没有子节点但是旧节点有子节点,则清空旧节点的文本内容
  5. 若新旧节点文本内容不同则替换。

③ 具体diff算法(全量递归对比)

 
  

下面用图示表示下vue2 diff的过程

原始2个列表 7.jpg

下面图示表示下vue3 diff的过程

vue3diff.jpg

这里说下最定长稳定序列,因为大部分情况下,页面都是静态或者没有变化的元素,因此,这部分操作无疑是无效对比,浪费性能。新旧vVode列表相同的部分就是最长稳定序列。对比vue2的全量对比,提高了性能。

最长稳定序列(递增)用算法举例如下:

数列 的最长稳定(递增)序列如下;

附一道最长递增(连续)序列算法

 
  

附一道最长递增(不用连续)序列算法

到此这篇vue2与vue3 diff(vue2与vue3 diff算法)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • vue2生命周期有几个(vue生命周期有多少个)2025-09-29 21:09:08
  • js深拷贝一个对象(js如何深拷贝一个对象)2025-09-29 21:09:08
  • PCIe5.0显卡延长线(pcie3.0显卡延长线)2025-09-29 21:09:08
  • vue2改成vue3麻烦吗(vue2升级3)2025-09-29 21:09:08
  • pcie5(pcie5.0的显卡有哪些)2025-09-29 21:09:08
  • vue2关闭eslint(vue2关闭当前页面跳转路由)2025-09-29 21:09:08
  • map转jsonobject对象 gson(map转成jsonobject)2025-09-29 21:09:08
  • map转json字符串再转对象(map转化为json字符串)2025-09-29 21:09:08
  • keil5.29破解(keil 5破解版)2025-09-29 21:09:08
  • 路由守卫vue(路由守卫的作用和意义)2025-09-29 21:09:08
  • 全屏图片