深入理解 CSR / SSR / SSG / ISR:前端四种渲染模式的本质与选型

在前端工程化发展过程中,“页面是如何生成 HTML 的”逐渐成为一个绕不开的话题。
CSR、SSR、SSG、ISR 本质上并不是框架概念,而是渲染发生的时间与位置不同


一、什么是“渲染模式”

所谓渲染模式,本质只有一个问题:

页面的 HTML 是在什么时候、由谁生成的?

模式 HTML 生成位置 生成时机
CSR 浏览器 运行时
SSR 服务器 请求时
SSG 构建环境 构建时
ISR 构建环境 + 服务端运行时 构建时 + 请求后

二、CSR(Client Side Rendering)

2.1 基本概念

CSR(客户端渲染)指的是:

服务器返回一个空壳 HTML,页面内容由浏览器执行 JavaScript 动态生成

典型的 SPA(Single Page Application)即 CSR 架构。


2.2 渲染流程

1. 浏览器请求页面
2. 服务器返回基础 HTML(只有一个挂载点)
3. 浏览器下载 JS
4. 执行 JS
5. 框架生成 DOM
6. 页面可见

示例 HTML:

<body>
  <div id="app"></div>
  <script src="/main.js"></script>
</body>

2.3 优缺点分析

优点

  • 前后端分离彻底
  • 架构简单,开发体验好
  • 首屏之后交互性能优秀
  • 非常适合复杂交互应用

缺点

  • 首屏白屏时间长
  • 对 SEO 不友好
  • 弱网环境体验差

2.4 适用场景

  • 后台管理系统
  • 内部系统
  • 对 SEO 无要求的应用
  • 高交互、长生命周期页面

三、SSR(Server Side Rendering)

3.1 基本概念

SSR(服务端渲染)指的是:

服务器在接收到请求后,执行前端框架代码,生成完整 HTML 再返回给浏览器

浏览器拿到的 HTML 已经包含完整内容。


3.2 渲染流程

1. 浏览器请求页面
2. 服务器执行 Vue/React
3. 生成完整 HTML
4. 返回 HTML
5. 浏览器直接渲染页面
6. 下载 JS
7. Hydration(事件绑定)

3.3 Hydration(水合)机制

Hydration 的本质是:

让客户端 JS 接管服务器生成的 DOM,而不是重新创建 DOM

主要工作包括:

  • 事件绑定
  • 状态同步
  • 校验 DOM 一致性

如果两端生成的 DOM 不一致,就会出现常见的 Hydration mismatch 问题。


3.4 优缺点分析

优点

  • 首屏速度快
  • SEO 友好
  • 更好的可访问性(a11y)

缺点

  • 服务器压力大
  • 架构复杂度高
  • 调试成本高
  • 需要处理 Node / 浏览器环境差异

3.5 常见问题

  • window / document 在服务端不可用
  • 请求数据的重复获取
  • 状态在服务端与客户端同步问题
  • Hydration mismatch

3.6 适用场景

  • 官网
  • 内容型网站
  • 对 SEO 有明确要求的页面
  • 首屏性能敏感页面

四、SSG(Static Site Generation)

4.1 基本概念

SSG(静态站点生成)指的是:

在构建阶段直接生成 HTML 文件,运行时不再执行渲染逻辑

用户访问时,服务器只是返回一个静态文件。


4.2 构建与访问流程

构建阶段:
1. 执行前端代码
2. 请求数据
3. 生成 HTML 文件

运行阶段:
1. 用户访问
2. CDN / 静态服务器直接返回 HTML

4.3 优缺点分析

优点

  • 极致的首屏性能
  • SEO 效果最好
  • 几乎没有服务器计算成本
  • 非常适合 CDN

缺点

  • 不适合高频变更数据
  • 构建时间可能较长
  • 动态性弱

4.4 SSG + CSR 的常见组合

实际中常见模式是:

首屏内容由 SSG 提供,页面加载后通过 CSR 请求实时数据

这也是 Nuxt / Next / Astro 中最常见的实践方式。


4.5 适用场景

  • 博客
  • 技术文档
  • 产品官网
  • 帮助中心

四、ISR(Incremental Static Regeneration)

ISR 不是一种全新的渲染模式,而是 SSG 的“延迟更新版”。

它解决的是 SSG 最大的痛点之一:
静态 HTML 一旦生成,就只能等下一次构建才能更新。


4.1 基本概念

ISR(增量静态再生成)指的是:

页面在构建阶段生成静态 HTML,但在运行时可以按需、按周期重新生成并缓存最新 HTML

核心思想一句话概括:

“HTML 不是一次性生成的,而是可以被后台悄悄刷新。”


4.2 ISR 的核心特征

特征 描述
初始访问 返回已生成的静态 HTML
后续访问 继续返回旧 HTML
触发条件 达到 revalidate 时间或手动触发
更新方式 后台重新生成 HTML
用户感知 几乎无感

4.3 运行流程(以 Next.js / Nuxt 为例)

构建阶段:
1. 生成初始静态 HTML
2. 部署到 CDN / 服务器

运行阶段:
1. 用户访问页面
2. 返回缓存的 HTML
3. 如果超过 revalidate 时间
   → 后台重新生成 HTML
4. 新 HTML 覆盖旧缓存

注意关键点:

重新生成发生在“请求之后”,但不阻塞当前请求


4.4 和 SSG 的本质区别

对比项 SSG ISR
HTML 生成时机 构建时 构建时 + 运行时
是否支持更新
更新方式 全量重新构建 单页面增量更新
实时性
架构复杂度

可以理解为:

ISR = SSG + 有条件的后台再生成


4.5 ISR 解决了什么问题?

ISR 主要解决三类真实工程问题:

1. 内容更新不频繁,但也不是“永不变”

例如:

  • 博客文章
  • 产品介绍页
  • 文档页面
  • 营销落地页

SSG 太死,SSR 太重,ISR 刚好。


2. 构建时间失控的问题

当页面数量很大时:

  • 纯 SSG → 构建时间爆炸
  • ISR → “先生成重要页面,其余按需生成”

3. 性能 + 成本的平衡

  • 首屏性能 ≈ SSG
  • 服务器压力 ≪ SSR
  • 内容新鲜度 > SSG

4.6 ISR 的局限性

ISR 不是银弹,也有明确边界:

不适合:

  • 强实时数据(股价、聊天)
  • 用户强个性化页面
  • 高频写入场景

适合:

  • 内容型页面
  • 低频更新但需要“看起来很新”的内容

五、SSR / SSG / ISR 的关系梳理

可以用一句话来区分三者:

  • SSR:每个请求都算一遍
  • SSG:只在构建时算一遍
  • ISR:构建时算一遍,之后“按需再算”

六、四种模式完整对比

维度 CSR SSR SSG ISR
HTML 生成时机 运行时 请求时 构建时 构建时 + 运行时
首屏性能 一般 较好 最佳 接近 SSG
SEO 极好 极好
服务器压力 极低
构建成本 高(页面多时)
内容实时性
架构复杂度

七、工程实践中的升级版选型建议

是否需要 SEO?
 ├─ 否 → CSR
 └─ 是
     ├─ 是否需要实时数据?
     │    ├─ 是 → SSR
     │    └─ 否
     │        ├─ 是否内容基本稳定?
     │        │    ├─ 是 → SSG
     │        │    └─ 否 → ISR

八、SO

CSR、SSR、SSG、ISR 并不存在“谁更先进”的问题,它们只是针对不同目标的工程方案:

  • 首页 / 落地页 → SSG / ISR
  • 内容详情页 → ISR
  • 搜索 / 个性化页 → SSR
  • 后台系统 → CSR

不是“选一种模式”,而是“组合使用”。
CSR / SSR / SSG / ISR 的本质不是技术高低,
而是“HTML 生成成本、时机、频率”的不同取舍。

理解四者的本质,有助于在架构设计阶段做出更合理的技术决策。


Finally

如果 you 正在使用 Next / Nuxt / Astro,你会发现它们的真正价值在于:

不是提供某一种渲染模式,
而是让你可以在同一个项目中自由切换 CSR / SSR / SSG / ISR。

这是现代前端框架发展的核心方向,也是前端工程化发展到今天的一个重要标志。

posted @ 2025-12-18 15:38  幼儿园技术家  阅读(290)  评论(0)    收藏  举报