Vue patchVnode流程图(vdom-diff算法)
2020-04-07 11:32:29   0  举报             
     
         
 Vue vdom-diff 流程图
    作者其他创作
 大纲/内容
 --oldEndIdx--newEndIdx对比前一个
  Y
  N
  ++newStartIdxnewStartVnode往后移,比较下一个
  newStartVnode跟oldVnode 中存在的节点是否相同
  ++oldStartIdx++newStartIdx对比下一个
  --oldEndIdx对比前一个
    oldVnode 与 vnode完全相同
  当做新元素处理,新建
  oldEndVnode不存在
  结束
  newStartVnode新增到oldVnode未处理的子元素之前
  子节点是否相同
  清空dom中的所有节点元素
  删除oldStartIdx和 oldEndIdx之间未处理的旧元素
  oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx
  移动,将oldStartVnode移动到oldVnode 未处理节点之后
  vnode是否有子节点
  newStartVnode在 oldVnode中不存在
  --oldEndIdx--newEndIdx
  oldVnode 是否有子节点
  patchVnode
  vnode是否有text
  oldStartVnode不存在
  oldVnode 是否有文本
  将对应的旧元素所在位置设为undefined,方便下次循环时跳过
  vnode 和 oldVnode 都有子节点
  newStartIdx > newEndIdx新元素节点循环结束
  ++oldStartIdx--newEndIdx
  oldValue 与 vnode都是静态节点
  清空dom中的文本
  oldVnode 有text
  移动,将oldEndVnode移动到oldVnode未处理节点之前
  ++oldStartIdx对比下一个
  是否与 oldVnode的 text 一致
  oldStartIdx > oldEndIdx旧元素节点循环先结束
  updateChildren
  清空文本
  新建节点更新dom
  替换dom中的文本
  新增newStartIdx和 newEndIdx 之间未处理的新元素
   
 
 
 
 
  0 条评论
 下一页
  
   
  
  
  
  
  
  
  
  
 