2026/4/18 6:48:24
网站建设
项目流程
百度竞价网站建设,你好南京网站,wordpress 管理员权限设置密码,湖南茶叶品牌网站建设这篇文章主要概括性的讲一下 React 架构演进历史#xff0c;细节部分在之后的系列文章中都会详细讲到。1. React 核心架构
React 核心#xff08;核心算法、调度、Hooks 等#xff09;↓
Reconciler#xff08;协调器#xff09;↓
Renderer#xff08;不同平台的渲染器细节部分在之后的系列文章中都会详细讲到。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 更新优先级LanesReact 中的更新被分配不同的 laneSync Lane用户交互等高优先级Default Lane普通更新Idle Lane后台任务Scheduler 会先将高优先级任务交给 Reconciler再做低优先级。5.2 Suspense Deferred UI解决 IO 瓶颈React v18 之后的 Suspense 可以声明性地处理异步数据Suspense fallback{Spinner /} MyAsyncComponent / /SuspenseReact 会暂停渲染某些部分优先处理更重要的部分。Suspense 已完全集成并发特性是一个稳定、可用于生产环境的数据获取、流式服务器渲染和其他异步任务的解决方案。6. React 19 的架构增强编译器 Actions因为现在面试基本上都会问一些最新版本的更新所以这里也提一嘴。React19 保留Fiber Scheduler的底层架构但在此基础上加入了如下重要增强6.1 Actions 异步状态处理React 19 引入了 Actions API这不是新的执行模型而是对异步更新场景的 更高层封装await someAsyncFunction(); startTransition(() { setPage(/about); });它自动处理挂起状态错误处理乐观更新相比以前需要手动管理状态极大简化了异步更新流程。6.2 新的useAPIReact19 增加了一个类似 Suspense 与 async 协作的 APIconst data use(fetchPromise)React 会 在渲染期间自动挂起直到 Promise 解决。使得异步资源的处理更简洁。6.3 Compiler自动优化替代 useMemo / useCallback / React.memoReact19 中我们终于不用考虑 useMemo / useCallback / React.memo 了React 编辑器内部会自动帮我们做优化我们只需要写好逻辑代码就可以。记得字节内部有个规定没有明确优化情况下不要使用 useMemo / useCallback因为你永远不知道 你的代码逻辑 和 useXxx 执行内部逻辑哪个更耗费性能。React19 的内部编译器会自动识别何时需要缓存渲染逻辑减少手写优化代码。React 优化总算跟进了 Vue3 中 细颗粒度且自动的 编译优化或者说甚至完全自动直接反超了6.4 SSR 与 Server Actions 的支持React19 加强了 React Server Components支持服务器上执行数据获取逻辑更快的静态生成、流式 HTML异步渲染更贴近 IO 优化。