CSR vs SSR vs SSG 加载对比

模拟三种渲染模式在页面加载过程中的不同表现,对比白屏时间、FMP、LCP 等核心指标

模拟加载

CSR SSR SSG
CSR 客户端渲染

CSR 渲染结果

这是通过客户端 JavaScript 渲染的内容

A
客户端组件
JavaScript 在浏览器端执行
B
动态数据
通过 fetch API 获取
C
交互处理
浏览器绑定事件
等待加载 -
SSR 服务端渲染

SSR 渲染结果

这是服务器预先渲染好的 HTML

A
服务端组件
HTML 在服务器生成
B
预获取数据
服务器请求 API 后渲染
C
水合激活
JS 加载后绑定事件
等待加载 -
SSG 静态站点生成

SSG 渲染结果

这是构建时预生成的静态 HTML(CDN 缓存)

A
预生成组件
构建时直接输出 HTML
B
构建时数据
静态数据嵌入 HTML
C
CDN 分发
全球边缘节点缓存
等待加载 -

加载时间线

HTML 加载 JS 解析 渲染 水合 数据获取 服务端渲染 构建 / CDN 缓存
CSR 客户端渲染
HTML
JS 解析
数据获取
渲染
SSR 服务端渲染
服务端渲染
HTML
JS
水合
SSG 静态站点生成
构建
CDN 缓存
JS
水合

性能指标对比

CSR
TTFB-
FP (白屏时间)-
FMP / LCP-
TTI-
0ms0ms
SSR
TTFB-
FP (白屏时间)-
FMP / LCP-
TTI-
0ms0ms
SSG
TTFB-
FP (白屏时间)-
FMP / LCP-
TTI-
0ms0ms

详细数据

阶段说明耗时
HTML 加载下载空的 HTML 外壳文档-
JS 下载与解析下载框架代码 + 业务代码并解析-
数据获取客户端发起 API 请求获取数据-
渲染JavaScript 生成 DOM 并挂载到页面-
总计-
阶段说明耗时
服务端渲染服务器执行组件渲染,等待数据获取-
HTML 传输传输包含内容的完整 HTML-
JS 下载下载水合所需的 JavaScript-
水合为已有 DOM 绑定事件处理器-
总计-
阶段说明耗时
构建构建时预渲染页面(不计入运行时)-
CDN 缓存从 CDN 边缘节点获取缓存的 HTML-
JS 下载下载交互所需的 JavaScript-
水合为已有 DOM 绑定事件处理器-
总计-