ReactFiberScheduler 和 Scheduler 的关系

来源:4-9 performWork

Dalei666

2019-05-29

老师好,我在学习 Scheduler 调度任务的时候有个关于 ReactFiberScheduler 和 Scheduler 之间关系的问题:
我现在对这个更新流程的理解是:

  1. 每个更新到来后,生成一个 Update 对象,放到 ReactRoot 的 updateQueue 里。
  2. 中间一系列计算过期时间后更新 ReactRoot 的过期时间并将它添加到 ReactFiberScheduler 的 ScheduledRoot 链表里。
  3. 判断这次更新是批量/批量,同步/异步,如果是异步任务,就执行 scheduleCallbackWithExpirationTime(root, expirationTime);进而执行 callbackID = scheduleDeferredCallback(performAsyncWork, {timeout});
  4. scheduleDeferredCallback 在 Scheduler 里,会对应生成一个 callbackNode,并对这个 callbackNode 安排更新。

目前我对调度的流程是这样认为的,但是 ReactRoot 是惟一的,所以它上面可以包含很多 update 对象,而在执行 scheduleDeferredCallback(performAsyncWork, {timeout}); 的时候,并没有区别是哪个节点的更新,这中间通过什么联系起来?

是不是说 ReactFiberScheduler 只管理需要更新的 Root,Scheduler 管理需要的任务,各做各的,各有各的顺序,但都是对应的,Scheduler 执行了一个任务后 ReactFiberScheduler 去更新的任务总是最高优先级的?

写回答

1回答

Jokcy

2019-05-29

是的,Scheduler只是管理调度的,他管的是跟浏览器渲染去要时间,要到时间之后就回来执行React的更新了,至于这个时候你哪个更新任务优先级高,那不是他的事情。

0
1
Dalei666
了解了,谢谢老师
2019-05-31
共1条回复

React源码深度解析 高级前端工程师必备技能

掌握React源码,让你的开发水平没有上限,更不惧前端未来的到来

1749 学习 · 336 问题

查看课程