diff 算法

264 阅读1分钟

新旧节点先两头比然后交叉比较。

1.比较老开始节点和新的开始节点。 2.比较老结束节点和新的结束节点。 3.比较老开始节点和新的结束节点。 4.比较老结束节点和新的开始节点。 如果开始节点和结束节点都不相同 使用newStartNode的key再老节点数组中找相同节点 先设置key和index 的对象 元素的key 避免重复渲染。提高性能。根据key的对比相同的key不会再去渲染。 patch() --> patchVnode() -- > updateChildren()

patch函数是snabbdom的核心函数,可以理解为对新旧dom进行差异化的函数,会返回一个新的虚拟节点

  • 大致流程如下

  • 对比新旧节点是否相同节点,(判断key和sel)

  • 如果不是相同节点,则删除旧的节点,重新渲染

  • 如果是,则判断新的节点是否有text,且与旧节点的text不相同,则更新文本

  • 如果新节点有children,则判断子节点是否有变化,判断子节点时使用diff算法

  • diff工程只会进行同层级的比较