Notes

diff 策略

一句话结论:React 的 Diff 不是通用树 Diff,而是基于组件模型做了强假设:只比较同层级、依赖 key/type 复用、数组用线性策略 + Map 补偿,整体追求 O(n) 的可预测性能。

1. 三个核心假设

  • 只对比同一层级(不同层级直接重建)
  • key 稳定代表“同一个人”,type 匹配代表“同一种组件/节点”
  • 列表用 key 辅助定位,避免全量重建

2. 列表 Diff 的直觉

  • 先尝试按索引线性复用(快路径)
  • 一旦错位,用 Map(key→旧 Fiber)查找可复用节点
  • 需要移动/插入时打 Placement 等 flags

3. 代价与收益

  • 收益:性能稳定、实现可控
  • 代价:需要开发者提供稳定 key,否则会产生错误复用与额外 DOM 操作

关联阅读

cd ..