简述diff算法过程

diff算法是比较两个vdom,计算出最小的变更,以便减少DOM操作次数,提高性能。

核心原理

  • 只比较同一层级
  • tag不相同删除重建,后续tag不在深度比较
  • tag和key相同认为是同一节点,不在深度比较

算法过程

  • 首先,它会判断是否是首次渲染,因为如果是首次渲染,没有旧的vnode,不需要比较,直接渲染

  • 非首次渲染,首先比较两个节点的tag和key是否一样。如果不一样,直接删除重建;如果一样,则进一步比较两个vnode;

    • 新vnode text有值(children无值):设置新text,且判断旧children如果有值,直接删掉
    • 新vnode text无值,新children有值,旧children无值:添加children,且判断旧text如果有值,设置为空
    • 新vnode text无值,旧children有值,新children无值:删除children
    • 新vnode text无值,旧有值:设置text为空
    • 新vnode text无值,旧 新children都有值:这时会使用双端比较来比较新旧children list,如果双端比较没通过,则会用新children里面每个vnode key去旧children找相同的key节点;没找到则算是新节点插入,找到了再进行比较两个vnode(递归)

results matching ""

    No results matching ""