Vue2 Vue3 React 三者diff算法有何区别?

257 阅读1分钟

介绍diff算法

  • diff算法很早就有
  • diff算法应用很广泛,例如github的Pull request中的代码diff
  • 如果要严格diff两棵树,时间复杂度O(n^3), 不可用

tree diff O(n^3)

image.png

Tree diff的优化

  • 只比较同一层级,不跨级比较
  • tag不同则删除重建(不再比较内部细节)
  • 子节点通过key区分(key的重要性)

优化后的时间复杂度O(n)

image.png

学习技巧

  • diff算法非常复杂,不要深究细节
  • 三者比较,找最大的不同

react diff 仅右移

image.png

vue2 双端比较

image.png

vue3 最长递增子序列

image.png

核心目的

  • 尽量减少dom操作

答案

  • vue2 双端比较
  • vue3 最长递增子序列
  • react 仅右移

vue react 为何循环时必须使用key

  • vdom diff算法会根据key判断元素是否需要删除
  • 匹配key,则只移动元素 - 性能较好
  • 未匹配key,则删除重建 - 性能较差

image.png