React SSR 架构边界

React SSR 中服务端组件、客户端组件、服务端数据准备与客户端补请求之间的整体职责边界。

#tech / dev / frame #resource / react #type / synthesis #status / growing

[!info] related notes

React SSR 架构边界

React SSR 真正难的地方,往往不是单独理解某个名词,而是把服务端组件、客户端组件、首屏数据和客户端增量请求放到同一条链里看清楚。

一句话定义

React SSR 架构边界的核心是:把首屏必须稳定输出的内容、可留在服务端的数据准备,以及真正依赖浏览器交互的逻辑拆到不同层次,各自承担最合适的职责。

为什么这页要单独存在

  • 单看服务端组件,容易忽略数据阶段
  • 单看数据获取,容易忽略交互归属
  • 单看 hydration,又容易忽略哪些东西本来就不该进客户端

一条整体主线

服务端组件

  • 更适合组织首屏内容和可在服务端完成的数据准备
  • 目标是减少不必要的客户端逻辑进入接管链路

客户端组件

  • 更适合承接事件、状态、effect 和浏览器能力
  • 目标是只把真正需要交互的部分留给客户端执行

服务端阶段的数据

  • 更适合首屏必须稳定展示的关键数据
  • 目标是让用户第一次看到的页面更完整

客户端补请求

  • 更适合交互后才需要或可以延后加载的增量信息
  • 目标是让首屏链路不过度膨胀

应该怎么理解它们之间的关系

  • 不是“服务端做得越多越高级”
  • 也不是“客户端越灵活越通用”
  • 真正重要的是:首屏内容、交互逻辑和后续增量更新要分层合理

常见误区

  • 把 SSR 理解成“客户端请求会消失”
  • 把服务端组件理解成“任何东西都该先放服务端”
  • 把首屏完整度和后续交互节奏混成一个问题

最短记忆方式

服务端先把第一屏做稳,客户端接住交互,再按节奏补增量。

面试要点

来自 react-ssr-architecture-boundaries-interview-question 的面试视角整理。

一句话回答

首屏必须稳定展示的内容和关键数据,优先在服务端层完成组织与准备;真正依赖浏览器交互的状态、事件和 effect 留给客户端组件;首屏之后才需要的增量信息,再交给客户端按交互节奏请求。核心不是把一切都塞给某一端,而是让每一层只负责最适合自己的那部分。

最稳的回答主线

  • 第一层先说首屏:服务端先把核心内容做稳
  • 第二层再说交互:客户端组件负责浏览器侧能力
  • 第三层再说数据:关键首屏数据提前准备,增量数据后置补拉
  • 最后补一句:目标是平衡首屏完整度、接管成本和交互灵活性

一个更完整的面试表达

可以这样答:

我会把 SSR 架构拆成三层来看。
第一层是首屏内容和关键数据,优先在服务端完成,这样用户一进来就能看到完整主体;
第二层是浏览器交互能力,比如点击、输入、effect、客户端状态,这部分交给客户端组件;
第三层是首屏之后的增量数据,按交互节奏在客户端继续请求。
这样分工的目标不是偏向哪一端,而是平衡首屏质量、客户端接管成本和后续交互灵活性。

一个常见误区

不是说“能服务端做的就全部服务端做完”。

如果首屏做得过重,也可能:

  • 拉长响应时间
  • 提高服务端压力
  • 让整页耦合过深

所以成熟方案强调的是合理分层,不是单端极端化。

面试里容易加分的一句

成熟的 SSR 架构不是“把所有东西都提前做完”,而是让首屏、交互和增量更新各自待在最合适的层次里,减少互相拖累。

常见追问

  • 为什么 SSR 页面还会继续发很多请求
  • 服务端组件和传统 SSR 到底差在哪
  • 首屏做太重会不会反过来拖慢响应

最短记忆方式

第一屏服务端先稳住,交互客户端来接,增量数据按节奏补。

创建于 2026/3/19 更新于 2026/5/27