网站建设具体步骤,网站文风,鞍山诺亚人才网,任何网站都可以做谷歌推广的吗react diff算法为降低算法复杂度提出了三大策略#xff1a; 1.只进行同级比较 2.节点类型比较#xff0c;不同元素生成不同的fiber树 3.key作为元素的唯一标识
diff算法流程 diff算法需要进行两轮遍历#xff1a; 第一轮遍历更新的节点。 第二轮遍历没更新的节点。
第一轮…react diff算法为降低算法复杂度提出了三大策略 1.只进行同级比较 2.节点类型比较不同元素生成不同的fiber树 3.key作为元素的唯一标识
diff算法流程 diff算法需要进行两轮遍历 第一轮遍历更新的节点。 第二轮遍历没更新的节点。
第一轮 从头遍历newChildren对象和老的fiber树。如果节点key不同则不可复用第一轮遍历结束。若key相同但元素类型不同oldfiber标记为delete继续遍历。 第一轮遍历完有四种情况 1.newChildren 与 oldFiber 同时遍历完 理想情况只需在第一轮遍历进行组件更新diff结束 2.newChildren 没遍历完oldFiber 遍历完 本次更新有新加入的节点 3.newChildren 遍历完oldFiber 没遍历完 有节点被删除 4.newChildren 与 oldFiber 都没遍历完 有节点更新了位置通过oldfiber生成一个mapmap的key为oldfiber的keyoldfiber为value。遍历剩余的newChildrenlastPlacedIndex 是最后一个可复用的节点在 oldFiber 中的位置索引逐个在 map 中寻找 oldFiber 中可复用的节点如果找到可复用的节点则将 oldIndex 与 lastPlacedIndex 比较如果 oldIndex 与 lastPlacedIndex 小则该节点需要右移将新的 Fiber 节点标记为 Placement 。否则将 lastPlacedIndex 更新为 oldIndex 。 遍历完新的子元素map中还有剩余节点则删除。