Skip to content

并发更新的原理

本节课代码地址(请参考课程获取) 本节课对标「React设计原理」5.1节。 思考一个问题:我们当前的实现是如何驱动的?

  1. 交互触发更新
  2. 调度阶段微任务调度(ensureRootIsScheduled 方法)
  3. 微任务调度结束,进入render 阶段
  4. render 阶段结束,进入commit 阶段
  5. commit 阶段结束,调度阶段微任务调度(ensureRootIsScheduled 方法) 整体是个大的微任务循环,循环的驱动力是「微任务调度模块」。 同步示例 示例在两种情况下会造成阻塞: work.count 数量太多 单个work.count 工作量太大 并发更新的理论基础 并发更新的基础是「时间切片」。 在线示例 改造示例 如果我们想在宏任务中完成任务调度,本质上是个大的宏任务循环,循环的驱动力是
Scheduler 。

理论基础参考《React设计原理》 在微任务调度中,没有「优先级」的概念,对于Scheduler 存在5种优先级: ImmediatePriority UserBlockingPriority NormalPriority LowPriority IdlePriority 需要考虑的情况:

工作过程仅有一个work

如果仅有一个workScheduler 有个优化路径:如果调度的回调函数的返回值是函数,则 会继续调度返回的函数。

工作过程中产生相同优先级的work

如果优先级相同,则不需要开启新的调度。

工作过程中产生更高/低优先级的work

把握一个原则:我们每次选出的都是优先级最高的work

用心学习,用代码说话 💻