diff 算法是什么?
diff算法是一种通过同级 ,深度遍历,以及使用双指针的方法,最快速的找出新老虚拟dom的差异方法。
diff 算法优化策略
diff算法的优化策略:四种命中查找,四个指针 。“旧新对比”。
1.头对头(先比开头,后插入和删除节点的这种情况)。 如果匹配, 旧前指针++ 新前指针++,
2.尾对尾(比结尾,前插入或删除的情况)。如果匹配,旧后指针–, 新后指针–,
3.头与尾。如果匹配,旧前指针++, 新后指针–,
4.尾与头。如果匹配,旧后指针–, 新前指针++,
5.都不满足, 需要查找。 如果查到,新的指针++, 新的添加页面的数据替换
时间复杂度:
diff 算法是一个时间复杂度为 O(n*3) ,vue进行优化转化成 O(n)
为啥推荐使用key
key的作用主要是为了高效的更新虚拟DOM。key的主要作用其实就是对比两个虚拟Dom节点时,判断其是否为相同节点。如果key一样就直接对比其children中不同就行, 如果没有key值没有或者不一样, 那么就需要对比其他很多属性参数(很多很多)才能得出是不是相同的节点。