01-react 渲染流程

原文链接
先上一张图,这是 React 团队作者 Dan Abramov 画的一张生命周期阶段图,可以看出 React 的生命周期主要分为两个阶段:render 阶段和 commit 阶段。

其中 commit 阶段又可以细分为 pre-commit 阶段和 commit 阶段;

在这里插入图片描述

react 16 架构

React 16 是重构了 React 15 的一个大版本;其相比 React 15 架构增加了 Scheduler
React16 架构可以分为三层:

  • Scheduler(调度器)—— 调度任务的优先级,高优任务优先进入Reconciler
  • Reconciler(协调器)—— 负责找出变化的组件
  • Renderer(渲染器)—— 负责将变化的组件渲染到页面上

Scheduler

Schedule 是根据浏览器是否有剩余时间作为任务中断的标准,当浏览器有剩余时间时通知我们。然后根据优先级进行调度执行任务;

其实部分浏览器已经实现了这个API,这就是 requestIdleCallback。但是由于以下因素,React 放弃使用:

  • 浏览器兼容性
  • 触发频率不稳定,受很多因素影响。比如当我们的浏览器切换 tab 后,之前 tab 注册的 requestIdleCallback 触发的频率会变得很低

基于以上原因,React 实现了功能更完备的requestIdleCallback polyfill,这就是Scheduler。除了在空闲时触发回调的功能外,Scheduler还提供了多种调度优先级供任务设置。

render 与 commit 阶段统称为 work,即 React 在工作中。相对应的,如果任务正在 Scheduler 内调度,就不属于work。

Reconciler

Reconciliation 的内容主要是在 React 中如何去渲染和协调你的代码;Reconciler 采用 Fiber 架构,来实现异步可中断的更新;diff 算法就是发生在该阶段,为需要更新的 fiber 打上 effect tag;它主要有以下几个功能:

  • 注册调度任务: 与调度中心(scheduler 包)交互, 注册调度任务 task, 等待任务回调.
  • 执行任务回调: 在内存中构造出 fiber 树, 同时与与渲染器(react-dom)交互, 在内存中创建出与 fiber 对应的 DOM节点.
  • 输出: 与渲染器(react-dom)交互, 渲染 DOM 节点

Reconciler 工作的阶段被称为 render 阶段。因为在该阶段会调用组件的 render 方法;

Render

Renderer 根据 Reconciler 构造的 Fiber 树结构,根据对应的 effect tag 同步执行对应的 DOM 操作。这里存在 mount 以及 update 的 render 阶段;后面会详细说这块;

Renderer 工作的阶段被称为 commit 阶段。

参考

  • https://juejin.cn/post/6859528127010471949
  • https://react.iamkasong.com/preparation/idea.html
  • https://juejin.cn/post/6992588246785982494
  • https://juejin.cn/post/7019254208830373902
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiegiser#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值