0Pricing
React Academy · 课时

使用选择性水合实现渐进式水合

使用 React 18 的选择性水合,优先为用户首先交互的组件执行水合

使用选择性水合实现渐进式水合 是 CoddyKit 上的免费 React Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

什么是选择性水合

选择性水合是 React 18 的一项功能,它允许 React 在组件的 JavaScript 代码到达后立即开始为组件进行水合,而无需等待整个页面的 JavaScript 下载完成。每个独立进行代码分割的区域都会在其代码包加载时进行水合,而不是所有区域同时水合。

React 18:不再进行一次性水合

在 React 18 之前,水合是“全有或全无”的——React 必须下载所有 JavaScript 并为整棵树完成水合,页面的任何部分才能变得可交互。React 18 打破了这一限制:树的各个部分会随着其代码和数据可用而独立完成水合。

用户交互会优先触发水合

如果用户点击或与尚未完成水合的 Suspense 边界交互,React 会立即优先为该子树完成水合,然后再处理其他待处理的水合工作。这意味着用户试图使用的功能会先变得可交互,即使它不在文档顺序中的前面。

使用 React.lazy 和 Suspense 进行代码分割

将 React.lazy 与动态导入和 Suspense 边界结合使用,可以为经过代码分割的组件启用选择性水合。浏览器首先下载主 JS 代码包,并立即为外壳进行水合。每个延迟加载的组件会在其代码块下载完成后进行水合——随着浏览器获取这些代码块逐步完成。

对用户体验的影响

结果是,首屏内容会在首屏以下的 JavaScript 甚至下载之前就变得可交互。用户可以与导航和主视觉区域中的 CTA 交互,而评论信息流和推荐组件仍在加载其 JavaScript 代码块。

衡量影响

选择性水合会减少总阻塞时间(TBT)——这是衡量水合性能的关键指标。在 Chrome DevTools 的性能面板中,长任务(超过 50 毫秒的任务)会以红色突出显示。在选择性水合之前,您可能会看到一个用于完整水合的 300 毫秒长任务;之后,则会看到多个随时间错开的较小任务。

避免急切的顶层导入

破坏选择性水合的反模式是将所有组件都导入应用的顶部:import Footer from './Footer'。这会迫使浏览器在任何水合开始前下载、解析并执行 Footer 的代码。请用 React.lazy + 动态导入替换首屏以下组件的顶层导入。

为首屏以下内容使用动态导入

对于出现在初始视口以下的组件,请使用 const Footer = React.lazy(() => import('./Footer'))。将它们包裹在带有简单回退界面的 Suspense 中。浏览器会延后获取 Footer 的代码包,直到首屏水合完成,从而自然地改善 TBT。

流式传输与选择性水合的协同

流式传输和选择性水合相辅相成:流式传输发送 HTML 数据块以改善 FCP 和 LCP,而选择性水合处理 JavaScript 代码块以改善 TTI 和 TBT。二者共同解决性能的两个方面:快速显示内容,以及快速使内容具备交互能力。

选择性水合与 React 服务器组件

React 服务器组件将选择性水合推进得更远:服务器组件完全不会为客户端生成 JavaScript。只有客户端组件(用“use client”标记)需要进行水合。这样可减少需要水合的 JavaScript 总量,使选择性水合更加有效。

选择性水合的实用架构

一种实用模式是:使用 renderToPipeableStream 流式传输 HTML,在页面根部使用 hydrateRoot 调用(而不是 createRoot)来启用水合模式,对所有首屏以下区域使用 React.lazy,并将每个区域包裹在 Suspense 边界中。其余工作由 React 自动处理。

用户交互与选择性水合

用户交互会如何影响 React 18 中选择性水合的优先级?

课程回顾

选择性水合让 React 能随着 JavaScript 到达而逐步为组件子树进行水合,而不是等待完整代码包。用户交互会优先为目标子树进行水合。对首屏以下内容使用 React.lazy + 动态导入,并结合 Suspense 边界,即可实现这种渐进式模式。选择性水合和流式 SSR 是相辅相成的技术,二者共同解决内容交付和交互性能问题。

常见问题解答

「使用选择性水合实现渐进式水合」课时是免费的吗?

是的 — 「使用选择性水合实现渐进式水合」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「使用选择性水合实现渐进式水合」这节课中我会学到什么?

使用 React 18 的选择性水合,优先为用户首先交互的组件执行水合 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用选择性水合实现渐进式水合」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. React 18 流式渲染:renderToPipeableStream 的工作原理
  2. Suspense 边界与流式传输优先级
  3. 使用选择性水合实现渐进式水合
  4. 衡量流式传输的影响:FCP、TTI 与 LCP
← 返回 React Academy