介绍diff算法
- diff算法很早就有
- diff算法应用很广泛,例如github的Pull request中的代码diff
- 如果要严格diff两棵树,时间复杂度O(n^3), 不可用
tree diff O(n^3)
Tree diff的优化
- 只比较同一层级,不跨级比较
- tag不同则删除重建(不再比较内部细节)
- 子节点通过key区分(key的重要性)
优化后的时间复杂度O(n)
学习技巧
- diff算法非常复杂,不要深究细节
- 三者比较,找最大的不同
react diff 仅右移
vue2 双端比较
vue3 最长递增子序列
核心目的
- 尽量减少dom操作
答案
- vue2 双端比较
- vue3 最长递增子序列
- react 仅右移
vue react 为何循环时必须使用key
- vdom diff算法会根据key判断元素是否需要删除
- 匹配key,则只移动元素 - 性能较好
- 未匹配key,则删除重建 - 性能较差