news 2026/5/19 16:07:15

React架构演变

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React架构演变

这篇文章主要概括性的讲一下 React 架构演进历史,细节部分在之后的系列文章中都会详细讲到。

1. React 核心架构

React 核心(核心算法、调度、Hooks 等) ↓ Reconciler(协调器) ↓ Renderer(不同平台的渲染器,比如 ReactDOM / React Native 等)

React 的设计核心(设计哲学)是:

  • 声明式 UI + 虚拟 DOM
  • 组件化与状态驱动渲染
  • 单向数据流
  • 高性能调度与渲染执行模型

2. React16 之前的架构问题

旧架构在 React 16 之前大致称为 ​**Stack Reconciler(基于 JS 递归的树遍历实现)**​。

2.1 栈式递归的问题

旧架构使用递归调用去遍历组件树:

  • React 在一次更新过程中会一路递归到底。
  • 这个过程是 ​不可中断的​,没有优先级和中断机制。
  • 更新任务一旦开始就不能让出控制权。

导致两类主要瓶颈:CPU 瓶颈和 IO 瓶颈。

2.2 CPU 瓶颈(UI 卡顿)

当一个 large update(例如大量组件渲染、深层组件树更新)进入执行:

  • JS 线程运行时间可能超过单帧渲染预算(约 16ms/帧)。
  • 阻塞主线程 → 导致 UI 卡顿、掉帧、输入迟滞等体验问题。

2.3 IO 瓶颈(网络/异步等待感知)

在发起数据请求时:

  • 旧架构无法优雅处理异步数据加载的中断/等待;
  • 需要自己写大量状态管理逻辑(加载中、错误、更新顺序等)。

React 16引入了<Suspense>组件,主要用于使用React.lazy()进行​代码分割 ,​允许开发者在等待动态组件加载时显示备用 UI。即使使用 Suspense 也只能是语法糖,内部仍然是同步渲染模型,没有真正的优先级控制。

3. React16 引入的 Fiber 架构:解决 CPU & IO 瓶颈

React16 最大的变革是引入了 ​Fiber 架构与 Scheduler 调度器​。

3.1 Fiber 是什么?

Fiber 是一种新的内部数据结构:

  • 它代表一个 ​**工作单元(unit of work)**​。
  • 每个组件在 React 内部都有一个对应的 Fiber 节点。
  • Fiber 形成一棵链式结构(child 子节点, sibling 兄弟节点, return 父节点 指针关系),而非简单的递归栈调用。

Fiber 让 React 可以:

  • 拆分更新任务
  • 可中断执行
  • 优先级调度
  • 恢复中断 (resume work)

这是 React 能够支持Concurrent Rendering(并发渲染)的基础。

4. Scheduler(调度器):CPU 优化核心

Fiber 本身是一种数据结构,而真正能让任务不阻塞且优先级执行的是 ​Scheduler​。

Scheduler 的职责:

  • 打断大任务→ 避免阻塞主线程
  • 优先级排序→ 及时执行用户交互类更新(输入、点击)
  • 时间切片(Time Slicing)→ 把工作拆到多个帧执行

4.1 时间切片 (Time Slicing)

React 在 render 阶段:

while(workInProgressFiber) { performUnitOfWork(fiberNode) if (时间片结束 → 主线程还有工作要响应) { yield control back to browser } }

这样,长更新不会一次性吃掉主线程​。

5. React18 并发渲染 & 优先级

React18 引入了完整的Concurrent Rendering 并发渲染。

5.1 更新优先级(Lanes)

React 中的更新被分配不同的 lane:

  • Sync Lane:用户交互等高优先级
  • Default Lane:普通更新
  • Idle Lane:后台任务

Scheduler 会先将高优先级任务交给 Reconciler,再做低优先级。

5.2 Suspense & Deferred UI(解决 IO 瓶颈)

React v18 之后的 Suspense 可以声明性地处理异步数据:

<Suspense fallback={<Spinner />}> <MyAsyncComponent /> </Suspense>

React 会暂停渲染某些部分,优先处理更重要的部分。

Suspense 已完全集成并发特性,是一个稳定、可用于生产环境的数据获取、流式服务器渲染和其他异步任务的解决方案。

6. React 19 的架构增强(编译器 + Actions)

因为现在面试基本上都会问一些最新版本的更新,所以这里也提一嘴。

React19 保留Fiber + Scheduler的底层架构,但在此基础上加入了如下重要增强:

6.1 Actions & 异步状态处理

React 19 引入了 ​Actions API​,这不是新的执行模型,而是对异步更新场景的 ​更高层封装​:

await someAsyncFunction(); startTransition(() => { setPage('/about'); });

它自动处理:

  • 挂起状态
  • 错误处理
  • 乐观更新

相比以前需要手动管理状态,极大简化了异步更新流程。

6.2 新的useAPI

React19 增加了一个类似 Suspense 与 async 协作的 API:

const data = use(fetchPromise)

React 会 ​在渲染期间自动挂起直到 Promise 解决​。使得异步资源的处理更简洁。

6.3 Compiler:自动优化替代 useMemo / useCallback / React.memo

React19 中,我们终于不用考虑 useMemo / useCallback / React.memo 了,React 编辑器内部会自动帮我们做优化,我们只需要写好逻辑代码就可以。记得字节内部有个规定:没有明确优化情况下不要使用 useMemo / useCallback,因为你永远不知道 你的代码逻辑 和 useXxx 执行内部逻辑哪个更耗费性能。

React19 的内部编译器会​自动识别何时需要缓存渲染逻辑,减少手写优化代码​。

React 优化总算跟进了 Vue3 中 细颗粒度且自动的 编译优化,或者说,甚至完全自动,直接反超了?!

6.4 SSR 与 Server Actions 的支持

React19 加强了 ​React Server Components​:

  • 支持服务器上执行数据获取逻辑;
  • 更快的静态生成、流式 HTML;
  • 异步渲染更贴近 IO 优化。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 11:46:39

PyTorch-2.x-Universal-Dev-v1.0部署避坑:nvidia-smi验证技巧详解

PyTorch-2.x-Universal-Dev-v1.0部署避坑&#xff1a;nvidia-smi验证技巧详解 1. 为什么“能跑”不等于“跑对”——GPU验证的真正意义 刚拿到PyTorch-2.x-Universal-Dev-v1.0镜像&#xff0c;很多人会兴奋地输入nvidia-smi&#xff0c;看到显卡列表就以为万事大吉。但真实情…

作者头像 李华
网站建设 2026/5/8 3:46:54

3个实用技巧让你掌握移动端PDF预览解决方案

3个实用技巧让你掌握移动端PDF预览解决方案 【免费下载链接】pdfh5 项目地址: https://gitcode.com/gh_mirrors/pdf/pdfh5 移动端PDF预览一直是开发中的痛点&#xff0c;传统方案往往存在加载慢、体验差等问题。PDFH5作为一款轻量级移动端PDF预览工具&#xff0c;基于P…

作者头像 李华
网站建设 2026/5/19 12:40:11

FLUX.1-dev基础教程:Flask WebUI安装配置、端口映射、HTTPS反向代理设置

FLUX.1-dev基础教程&#xff1a;Flask WebUI安装配置、端口映射、HTTPS反向代理设置 1. 为什么选FLUX.1-dev旗舰版&#xff1f;——不只是“能用”&#xff0c;而是“好用到省心” 你可能已经试过不少图像生成工具&#xff0c;但大概率遇到过这些情况&#xff1a;刚输入一句漂…

作者头像 李华
网站建设 2026/5/12 14:26:26

OFA图像语义蕴含模型多场景:法律证据图示推理、科研图表语义验证

OFA图像语义蕴含模型多场景&#xff1a;法律证据图示推理、科研图表语义验证 1. 为什么你需要一个“能看懂图会逻辑判断”的AI&#xff1f; 你有没有遇到过这样的情况&#xff1a; 在整理一起交通事故的现场照片时&#xff0c;需要确认“图中倒地的自行车是否必然意味着骑车…

作者头像 李华
网站建设 2026/5/2 10:14:35

RexUniNLU开源大模型实战教程:DeBERTa-v2-chinese-base微调入门指南

RexUniNLU开源大模型实战教程&#xff1a;DeBERTa-v2-chinese-base微调入门指南 1. 为什么你需要这个教程 你是不是也遇到过这样的问题&#xff1a;手头有个中文文本理解任务&#xff0c;比如要从电商评论里抽产品属性和用户情绪&#xff0c;或者从新闻稿里识别事件和参与者&…

作者头像 李华
网站建设 2026/5/18 13:43:07

电商客服语音情绪监控实战:用科哥镜像快速实现异常预警

电商客服语音情绪监控实战&#xff1a;用科哥镜像快速实现异常预警 1. 为什么电商客服需要语音情绪监控 你有没有遇到过这样的场景&#xff1a;一位顾客在电话里语气越来越急促&#xff0c;语速加快&#xff0c;音调升高&#xff0c;但客服还在按标准话术机械回复&#xff1f…

作者头像 李华