0Pricing
React Academy · 课时

Suspense 边界与流式传输优先级

设置 Suspense 边界,控制哪些 HTML 分块先进行流式传输,以及后备内容何时转为实际内容

Suspense 边界与流式传输优先级 是 CoddyKit 上的免费 React Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

Suspense 作为流式传输分隔器

Suspense 边界是流式传输粒度的基本单位。组件树中的每个 Suspense 边界都会创建一个可独立流式传输的部分——React 可以按照各自的速度解析并流式传输每个边界,彼此互不影响。

外壳:快速的同步内容

外壳由 Suspense 边界之外的所有内容组成——布局、导航、页脚以及任何可同步获得的内容。外壳首先且快速地进行流式传输,让用户立即看到页面结构,同时依赖数据的部分在后台加载。

初始 HTML 中的回退界面

当 React 流式传输外壳时,任何数据尚未可用的 Suspense 边界都会渲染其回退界面——通常是加载骨架屏或旋转指示器。此回退界面会包含在初始 HTML 响应中,因此用户会立即看到加载指示器,而不是空白区域。

解析并替换回退界面

当 Suspense 边界的数据解析完成时,React 会连同一小段内联脚本一起流式传输已解析的 HTML。该脚本会将新传输的内容从隐藏的模板元素移到 DOM 中的正确位置,在无需完整重新加载页面的情况下替换回退界面。

内联脚本模式

React 使用 HTML 模板元素模式:已解析的 Suspense 内容会流式传输到隐藏的模板中,随后脚本调用 React 的内部函数,将模板内容交换到 DOM 中的正确位置。这样无需 JS 框架即可操作 DOM 来完成替换。

嵌套 Suspense:独立的时间线

嵌套的 Suspense 边界拥有独立的解析时间线。内部 Suspense 边界可能先于外部边界解析完成——React 会在内部内容就绪后立即将其流式传输,而不论外部边界是否已经解析完成。这会最大限度地提高数据加载的并行性。

放置策略:各内容应放在哪里

有效放置 Suspense 的方式是:将缓慢且依赖数据的组件放在 Suspense 边界内,将快速、静态或可同步获得的内容放在边界外。导航栏、包含静态文本的主视觉区域和页脚应放在外部。商品列表、用户仪表板和评论信息流应放在内部。

流式传输顺序:不一定遵循文档顺序

React 会在 Suspense 边界解析完成后传输它们,而不一定按照它们在文档中出现的顺序。由于所需数据更少,页面首屏以下的部分可能比首屏部分更早解析完成。无论流式传输顺序如何,React 都能正确处理 DOM 插入。

优先级提示与用户交互

React 18 的选择性水合会响应用户交互:如果用户点击或悬停在尚未完成水合的 Suspense 边界上,React 会优先为该边界完成水合。这可确保即使页面其他部分仍在水合,用户交互也能保持响应。

避免边界划分过细

Suspense 边界越多,流式传输就越灵活,但过多的边界会增加内联替换脚本带来的开销。实用建议是:包裹完整的“区域”(首屏内容、侧边栏、首屏以下的信息流),而不是单个组件。每页使用一到三个 Suspense 边界通常是较为理想的平衡点。

使用 Chrome DevTools 衡量流式传输的影响

在 Chrome DevTools 的网络面板中,使用“保留日志”并观察响应的流式传输:HTML 文档会以数据块逐步增长。性能面板会显示 FCP 和 LCP 标记——请比较流式与非流式构建版本,以量化改进效果。将网络限制为快速 3G,可以放大这一效果。

流式 HTML 中的 Suspense 回退界面

Suspense 边界的回退界面会在初始流式 HTML 响应中如何处理?

课程回顾

Suspense 边界将 React 树划分为可独立流式传输的部分。外壳(Suspense 之外)首先进行流式传输;对于仍在等待的边界,回退界面会立即显示;已解析的内容通过内联脚本替换回退界面。嵌套边界拥有独立的时间线。请在区域级别放置边界,以获得最佳流式传输粒度,并让 React 的优先级系统处理由交互驱动的水合顺序。

常见问题解答

「Suspense 边界与流式传输优先级」课时是免费的吗?

是的 — 「Suspense 边界与流式传输优先级」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「Suspense 边界与流式传输优先级」这节课中我会学到什么?

设置 Suspense 边界,控制哪些 HTML 分块先进行流式传输,以及后备内容何时转为实际内容 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

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

「Suspense 边界与流式传输优先级」课时需要多长时间?

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

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

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

此课程中的所有课时

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