关注公众号"知之洲"可以阅读本文全篇和其他优质干货。
原因
如果不进行对比,每次更新的时候都先卸载旧节点,然后挂载新节点,每次卸载或挂载都会造成页面重排,浪费性能,因此需要进行一些细粒度的操作,最好找到所有不同点,根据这些不同点进行细粒度的按需同步。可以从以下三个地方入手:
- 找到对相同的节点。(复用)
- 找出需要新增的虚拟DOM。(创建并插入)
- 元素发生位置变化,找出哪些元素需要移动。(移动)
调用时机
修改响应式属性会重新执行render函数,返回新虚拟DOM。这时候会调用patch对比新旧虚拟DOM,并返回一个patch对象,用来存储两个节点不同的地方,最后根据patch对象去更新DOM。
调用patch对比新旧虚拟DOM的时候,如果双方子级都为数组的情况下(具有多个子级节点)就会调用patchChildren方法,patchChildren方