vue diff算法大概过程和重要思想
- 两个不同类型的元素将产生不同的树。只要发现两个元素的类型不同,我们直接删除旧的并创建一个新的,而不是去递归比较。
- 比较并更新当前元素的差异
- 递归比较children
这时候分两种情况:
- 如果孩子不是textNode,那么需要再分三种情况处理
- 如果当前孩子是 textNode 那么直接更新 text即可
对孩子是vnode的三种情况:
- 有新孩子无旧孩子,直接创建新的
- 有旧孩子无新孩子,直接删除旧的
- 新旧孩子都有,那么调用 updateChildren 比较他们的差异,而这一部分就是diff算法的精髓所在
在diff比较的过程中,循环从两边向中间收拢,属性key值是优化diff性能的。
网友评论