主题
并发更新的原理
本节课代码地址(请参考课程获取) 本节课对标「React设计原理」5.1节。 思考一个问题:我们当前的实现是如何驱动的?
- 交互触发更新
- 调度阶段微任务调度(
ensureRootIsScheduled方法) - 微任务调度结束,进入
render阶段 render阶段结束,进入commit阶段commit阶段结束,调度阶段微任务调度(ensureRootIsScheduled方法) 整体是个大的微任务循环,循环的驱动力是「微任务调度模块」。 同步示例 示例在两种情况下会造成阻塞:work.count数量太多 单个work.count工作量太大 并发更新的理论基础 并发更新的基础是「时间切片」。 在线示例 改造示例 如果我们想在宏任务中完成任务调度,本质上是个大的宏任务循环,循环的驱动力是
Scheduler 。理论基础参考《React设计原理》 在微任务调度中,没有「优先级」的概念,对于Scheduler 存在5种优先级: ImmediatePriority UserBlockingPriority NormalPriority LowPriority IdlePriority 需要考虑的情况:
工作过程仅有一个work
如果仅有一个work ,Scheduler 有个优化路径:如果调度的回调函数的返回值是函数,则 会继续调度返回的函数。
工作过程中产生相同优先级的work
如果优先级相同,则不需要开启新的调度。
工作过程中产生更高/低优先级的work
把握一个原则:我们每次选出的都是优先级最高的work 。