React Fizz 是 React 的流式服务器端渲染 (SSR) 引擎。它能够在整个页面准备好之前,逐步将 HTML 内容从服务器发送到客户端,从而提高感知性能和用户体验。该系统对于内容丰富的页面或有数据获取需求的应用尤其有用。
有关 React Server Components 的信息,请参阅 React Server Components。
React Fizz 在服务器上渲染 React 组件,并将生成的 HTML 逐步传输到客户端。这使得浏览器能够在接收到完整响应之前开始处理和显示内容,显著改善了首字节时间 (TTFB) 和首次内容绘制 (FCP) 指标。
React Fizz 的主要功能包括
来源:packages/react-server/src/ReactFizzServer.js1-175 packages/react-dom/src/server/ReactDOMFizzServerNode.js1-45
来源:packages/react-server/src/ReactFizzServer.js459-535 packages/react-dom/src/server/ReactDOMFizzServerNode.js1-45 packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js1-95
来源:packages/react-server/src/ReactFizzServer.js337-462 packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js111-608
React Fizz 在处理服务器渲染请求时遵循特定的流程:
请求创建过程设置了流式服务器渲染所需的所有状态和配置。
来源:packages/react-server/src/ReactFizzServer.js459-535 packages/react-dom/src/server/ReactDOMFizzServerNode.js47-56
请求创建后,React Fizz 以任务的形式处理工作。
来源:packages/react-server/src/ReactFizzServer.js711-725 packages/react-server/src/ReactFizzServer.js1125-1340
React Fizz 对 Suspense 的处理是其最重要的功能之一,允许组件在数据获取或计算时暂停渲染。
| 状态管理 | 描述 |
|---|---|
| 待处理 (PENDING) | 初始状态,边界仍在渲染中 |
| 已完成 (COMPLETED) | 内容已完全渲染 |
| 已刷新 (FLUSHED) | 内容已刷新到客户端 |
| 已中止 (ABORTED) | 因错误导致渲染中止 |
| 发生错误 (ERRORED) | 渲染过程中发生错误 |
| 已推迟 (POSTPONED) | 渲染被推迟 |
来源:packages/react-server/src/ReactFizzServer.js304-310
来源:packages/react-server/src/ReactFizzServer.js1123-1370 packages/react-server/src/ReactFizzServer.js725-780
React Fizz 在 HTML 可用时将其流式传输到客户端。这通过段和块进行处理。
来源:packages/react-server/src/ReactFizzServer.js53-67 packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js1-95
React Fizz 在服务器渲染期间提供了强大的错误处理功能。
来源:packages/react-server/src/ReactFizzServer.js1023-1097 packages/react-server/src/ReactFizzServer.js1072-1097
React Fizz 实现了渐进式分块策略以优化流式传输性能。
该值代表了以下方面的平衡:
来源:packages/react-server/src/ReactFizzServer.js384-399
一旦 React Fizz 将 HTML 流式传输到客户端,客户端 React 需要“水合”此 HTML 以使其具有交互性。
来源:packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js171-199 packages/react-dom/src/__tests__/ReactDOMServerRendering-test.js42-149
来源:packages/react-dom/src/server/ReactDOMFizzServerNode.js58-176 packages/react-dom/src/server/ReactDOMFizzServerBrowser.js43-100
React Fizz 结合标准 React 客户端 API 进行水合。
来源:packages/react-dom/src/__tests__/ReactServerRendering-test.js31-83 packages/react-dom/src/client/ReactDOMRoot.js179-208
React Fizz 在以下场景中特别有用:
来源:packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js404-471 packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js201-256
来源:packages/react-dom/src/server/ReactDOMFizzServerNode.js1-45 packages/react-dom/src/server/ReactDOMFizzServerBrowser.js1-42 packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js1-95
调试 React Fizz 时,重点关注:
React 代码库包含了针对 Fizz 功能的广泛测试。
来源:packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js404-810 packages/react-dom/src/__tests__/ReactServerRenderingHydration-test.js41-166
React Fizz 提供了一个强大的流式服务器渲染解决方案,通过逐步交付 HTML 内容显著改善用户体验。通过在服务器端支持 Suspense,它可以在保持性能的同时实现复杂的渲染模式。与 React 客户端水合系统的紧密集成确保了从服务器渲染到交互式客户端应用程序的无缝体验。