吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(六)
湃召炯较在前端工程化发展过程中,“页面是如何生成 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:
<script src="/main.js"></script>
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。
更多推荐
所有评论(0)