react16架构分为3层:
Scheduler(调度器):调度任务的优先级,高优先级优先进入Reconciler
Reconciler(协调器):负责找出变化的组件
Renderer(渲染器):负责将变化的组件渲染到页面上。
调度器
协调器
Reconciler与Renderer不再是交替工作。当Scheduler将任务交给Reconciler后,Reconciler会为变化的虚拟DOM打上代表增/删/更新的标记
整个Scheduler和Reconciler都是在内存中进行。当所有组件都完成了Reconciler工作后,统一交给Renderer。
渲染器
Renderer根据Reconciler为虚拟Dom打的标记,执行对应的Dom操作。
由于协调器是在内存中中断的,不会更新页面DOM,所以用户感受不到中断的过程,不觉得中断。
当协调器完成了本次工作,会移交给渲染器,并通知渲染器更新视图。
红色框的步骤随时都可能被打断?
- 有其他更高优先级的任务需要执行
- 当前帧没有剩余时间。
但是由于调度器和协调器都是在内存中,不会更新页面上的DOM。及时反复中断,用户也感受不到。