React:栈调和(Reconciliation)

调和(Reconciliation) 过程与Diff算法

“调和”和“Diff”
“调和”又译为“协调”
Virtual DOM是一种编程概念。在这个概念里,UI以一种理想化的,或者说“虚拟的”表现形式被保
存于内存中,并通过如ReactDOM等类库使之与“真实的”DOM同步。这一过程叫作协调(调和)。调和过程并不能和Diff划等号,调和是“使一-致”的过程,Diff是“找不同”的过程。

Reconciler (调和器)的源码位于src/renderers/shared/stack/reconciler这个路径调和器所做的工作包括组件的挂载、卸载、更新等过程。

如今大众的认知里当我们讨论调和的时候,其实就是在讨论Diff,Diff确实是调和过程中最具代表性的一环。

要想找出两个树结构之间的不同传统的计算方法是通过循环递归进行树节点的一一对比。一一对比找不同的时间复杂度为O(n3)。对浏览器来说,O(n3)仍然意味着一场性能灾难。

OJ中相对理想的时间复杂度一般是0(1)或0(n),当复杂度攀升至0(n2)时,我们就会本能地寻求性能优化的手段。

● 若两个组件属于同一个类型,它们将拥有相同的DOM树形结构。
● 处于同一层级的一组子节点,可用通过设置key作为唯一标识从而维持各个节点在不同渲染过程中的稳定性。

Diff逻辑的拆分与解读
1. Diff 算法性能突破的关键点在于“分层对比”。
2. 类型一致的节点才有继续Diff的必要性。
3. key属性的设置,可以帮我们尽可能重用同一层级内的节点。

改变时间复杂度量级的决定性思路:分层对比
“DOM节点之间的跨层级操作并不多,同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值