优先级机制
React的两套优先级: lane模型以及Schedule
lane模型的优先级: 交互 > 动画 > 数据加载 同步交互(输入,点击) -> 连续交互(拖拽,动画) -> 普通更新(路由跳转,setState) ->
更多的关注于任务的优先级,而不是任务的执行时间;
Schedule的优先级: 任务的执行时间 更多的关注于任务的执行时间,而不是任务的优先级;它更关注任务的执行时间,而不是任务的优先级;
二者是互补的: lane负责优先级,调度器负责时间;
- 输入优先,异步可中断渲染,同步提交
- 然后其他机制是,协调器Render,异步可中断(分片工作,时间片机制,可插队)
- 同步不可中断,一次变更
流程
- React 根据交互类型确定更新优先级(Lane)
- 将 Lane 转换为 Scheduler 优先级
- Scheduler 根据优先级和当前帧时间决定任务执行时机
- 浏览器渲染间隙执行任务(通过 requestIdleCallback 类似机制)
lane模型
31个二进制位,低位优先;
拥有批处理机制,优先级位段相近的任务会被合并;
优势:
- 并发更新
- 批量处理