React--- concurrent mode(并发更新【异步可中断更新】)

94 阅读2分钟

并发概念

并发模式是一种全新渲染模式,允许React同时处理多个渲染任务,可以根据任务的优先级进行调度。并发模式下,React可以暂停、继续或放弃渲染任务,确保高优先级的任务能够及时响应。

React如何做到Concurrent Mode?

  • Concurrent Mode的挑战
    • 怎样做到中断渲染?
    • 怎样定义任务的重要程度和执行顺序?
    • 何时中断任务,怎样划分时间片?
    • 。。。。
  • 解决方法
    • 颗粒化更新节点解决递归不可中断问题
    • 任务增加优先级解决任务执行顺序
    • 创建任务调度机制解决时间分片和任务中断、任务恢复;

对应的React的实现就是:Fiber架构、lane模型、scheduler任务调度

Fiber结构----主要解决渲染可中断

lane模型----主要解决任务优先级问题

Scheduler任务调度----主要解决任务分片执行和中断恢复

scheduler中有两种任务队列,taskQueuetimerQueue,他们分别存放未过期任务和已过期任务。

taskQueue

依据任务的过期时间expirationTime排序,过期时间越早表示任务优先级越高。

time erQueue

依据任务的开始时间startTime排序,开始时间越早优先级越高。

并发模式使用

需要使用createRoot方法创建根节点

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'

const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(<App/>)

总结:

本文主要从Fiber架构,lane模型,scheduler任务调度三个角度来尝试阐述Concurrent Mode的主要特性:异步可中断更新

  • 通过Fiber架构完成从递归遍历更新到循环遍历更新的跨越,让render阶段可中断;

  • 通过lane模型给不同任务事件添加优先级来定义任务的重要程度;

  • 通过scheduler完成任务分片执行和中断恢复;