← 返回题目列表

SSR、CSR 和 SSG 有什么区别?

高频 中等 第 11 / 25 题 更新于 2026/07/28
SSRCSRSSG渲染模式

简化版

CSR 是浏览器下载 JS 后在客户端渲染页面;SSR 是服务器运行前端代码生成 HTML,再发送给浏览器;SSG 是构建时预生成 HTML。CSR 交互灵活,SSR 首屏和 SEO 更好,SSG 性能和稳定性好但适合内容较静态的页面。

详细版

三者对比:

  • CSR:服务端返回空壳 HTML,浏览器加载 JS 后渲染内容。
  • SSR:每次请求时服务端生成 HTML,浏览器收到即可看到内容。
  • SSG:构建阶段提前生成 HTML,请求时直接返回静态文件。

选择依据:

  • 强交互后台系统:CSR 足够。
  • SEO 和首屏要求高:SSR 或 SSG。
  • 内容更新不频繁:SSG。
  • 内容实时且个性化:SSR 或 CSR + 接口。

SSR 和 SSG 都能改善首屏内容可见性,但 SSR 有服务端运行成本,SSG 有构建和内容更新限制。

完整版教学

一、CSR 的特点

CSR 是现代 SPA 常见模式。服务器返回基础 HTML,主要内容由浏览器执行 JS 后生成。

它的优势是交互体验好、前后端分离清晰、部署简单。缺点是首屏依赖 JS 下载和执行,SEO 也可能受影响。

后台管理系统、强交互工具类产品通常适合 CSR。

二、SSR 的特点

SSR 在请求到来时,由服务端渲染出 HTML。用户可以更快看到内容,搜索引擎也更容易抓取。

但 SSR 需要 Node 服务或相应运行时,涉及缓存、并发、数据获取、错误处理和部署复杂度。

SSR 适合内容动态且需要 SEO 的页面,比如电商详情、资讯详情。

三、SSG 的特点

SSG 在构建时把页面生成静态 HTML。请求时直接走 CDN 或静态服务器,速度快、成本低、稳定性好。

缺点是内容变化后需要重新构建或增量更新。对于文档、博客、题库、营销页,SSG 非常适合。

四、面试追问与工程落地

面试官可能问:“SSR 一定比 CSR 快吗?”

不一定。SSR 能更快返回可见 HTML,但如果服务器慢、水合 JS 大、接口阻塞严重,整体体验仍可能差。最终要看 TTFB、LCP、Hydration 时间和交互可用时间。

工程选型不是追概念,而是看 SEO、首屏、交互复杂度、内容更新频率和部署成本。

五、用请求时间线和成本做选择

假设 API 取数 200ms、服务端渲染 50ms、浏览器 JS 下载执行 400ms:SSR 可能约 250ms 后收到有内容 HTML,但交互仍要等 JS;CSR 可能较早收到空壳,却约 600ms 后才出现主体;SSG 命中 CDN 可能几十毫秒返回内容。实际还受并行、缓存和网络影响。

维度CSRSSRSSG
生成时机浏览器请求后每次请求/缓存未命中时构建时
初始正文常依赖 JS
个性化强但缓存难
服务器渲染成本请求时极低
内容更新接口实时请求级实时需重建/失效
故障面客户端/API客户端+渲染服务/API构建与静态分发

不要只比较 TTFB:还要看 LCP、客户端 JS、水合结束、INP、服务器成本和内容陈旧度。

六、混合渲染与决策树

逐页问四个问题:是否公开需要 SEO?内容多久变化?是否按用户个性化?首屏交互是否强于内容?公开稳定内容优先 SSG;公开且高频变化可 SSR/ISR;登录后强交互工具通常 CSR。

需要公开抓取?
├─ 否 → 强交互/个性化:CSR 为主
└─ 是 → 内容能构建时确定?
        ├─ 是 → SSG/ISR
        └─ 否 → SSR,配缓存与客户端水合

一个电商站可以让营销页 SSG、商品公共信息 ISR、库存客户端实时刷新、购物车 CSR、首个商品请求 SSR。混合不是妥协,而是把计算放在最合适的时间和位置。

选型还要算峰值。若 SSR 每次占 50ms CPU、峰值 2000 QPS,理论需要约 100 CPU 核心的纯渲染时间;缓存命中 90% 可显著降低成本。没有容量模型就说“SSR 更快”是不完整的。

七、常见误区与追问

  • 误区:SSR 一定比 CSR 更快。 慢接口、高 TTFB 和大水合 bundle 可能让整体体验更差。
  • 误区:SSG 只能用于永不变化的页面。 可通过重建、增量生成或事件失效更新,只是实时性有成本。
  • 误区:采用一种模式后全站必须统一。 现代应用通常按路由甚至模块混合模式。
  • 追问:SSR 和 SSG 对 SEO 有本质差异吗? 两者都可输出完整 HTML,差异主要在生成时机、实时性与成本。
  • 追问:CSR 是否完全不适合 SEO? 不是绝对,但抓取更依赖 JS;公开内容通常 SSR/SSG 更确定。
  • 追问:SSR 后为什么还需要客户端 JS? 水合事件、状态和客户端导航仍依赖 bundle,除非页面保持纯静态。
  • 追问:怎样量化选型? 用更新频率、个性化比例、峰值 QPS、缓存命中和 Web Vitals 建模。

八、加强记忆

  1. CSR:请求时在浏览器生成,交互强但首屏依赖 JS。
  2. SSR:请求时在服务器生成,动态正文完整但增加运行成本。
  3. SSG:构建时生成,分发快稳但更新需要重建/失效。
  4. 比较指标:正文可见、交互可用、SEO、实时性、容量与故障面。
  5. 逐页决策:公开性、变化频率、个性化和交互强度决定模式。
  6. 混合落地:把公共外壳、动态数据和用户交互放到各自最合适层。