子节点更新策略
当patch的时候新旧节点都含有子节点的时候,需要找到旧节点中可以被复用的子节点.
封装一个函数,采用双指针法遍历虚拟dom树,找到可以复用的节点,接下来我们来手撕一下updateChildren()函数
值得一提的是,因为时间和能力有限,只能最大限度的还原此函数,只展示函数中最有魅力的算法精髓,对于一些繁琐的边界判断,可能会有所疏忽
1 | export default function updateChildren(parentElm,oldCh,newCh) { |
到此为止,我们已经将vue2 diff算法中的所有内容手撕完毕,不难发现,patch()和updateChildren()两个函数的相互调用是本算法的核心部分,实实在在做到的优化性能的效果
但是显而易见,该算法即使新旧节点大部分相同的情况下,还是会遍历相同的子节点,还是有优化的空间
所以在vue3中,新的diff算法使用了性能更高的求最长递增子序列算法,给每个节点打上静态标记,从而得到更好的性能.
如果时间够这几天看看能不能手撕
最后的最后 贴张图
重新学习vue3第五天
写于书咖