跳转至

前端渲染技术与黑话

前端渲染技术与黑话

页面 HTML 在哪里生成、什么时候生成,决定首屏速度、SEO、数据新鲜度、服务器成本和交互启动方式。SSG、SSR、CSR 描述生成时机,同一站点可以按页面和组件混合使用。

先看 HTML 的生成时机

flowchart LR
    q[页面请求] --> c{HTML 何时生成?}
    c -->|构建时| ssg[SSG<br>部署前生成]
    c -->|请求时| ssr[SSR<br>服务端生成]
    c -->|浏览器加载后| csr[CSR<br>客户端生成]

核心区别是:SSG 在构建时生成,SSR 在请求时生成,CSR 由浏览器加载 JavaScript 后生成。ISR 是 Next.js 对静态页按规则重新生成的叫法,归在 SSG 的增量更新里。

术语速查

术语全称生成时机典型特点
SSGStatic Site Generation,静态站点生成构建时预先生成 HTML,部署到 CDN 后访问快;内容更新通常需要重新构建,或配合增量重新生成
SSRServer-Side Rendering,服务端渲染每次请求时,或由服务端缓存后返回服务端根据请求和数据生成 HTML;适合需要 SEO、个性化或较新数据的页面,但需要服务端或边缘运行时
CSRClient-Side Rendering,客户端渲染浏览器加载 JavaScript 后先返回 HTML 外壳,再由浏览器请求数据并生成页面;交互复杂,服务端部署简单,但首屏与 SEO 依赖优化
SPASingle-Page Application,单页应用通常采用 CSR,也可以对首屏使用 SSR 或 SSG首次加载一个页面文档,后续路由切换由 JavaScript 完成;它描述应用形态,不等同于某一种渲染方式
ISRIncremental Static Regeneration,增量静态再生成(Next.js 用语)首次静态生成,之后按时间、请求或事件重新生成保留静态分发效率并更新部分内容;失效规则、短暂旧数据和重新生成失败路径要写清
RSCReact Server Components,服务端组件与 HTML 生成时机正交组件代码在服务端执行、默认不打进浏览器包;SSR/SSG 仍要单独问 HTML 何时生成
PPRPartial Prerendering,部分预渲染构建时静态外壳 + 请求时流式补动态区块同一路由里静态与动态并存;Next.js Cache Components 默认走这条路径
Hydration水合浏览器拿到 HTML 之后JavaScript 为已有 HTML 绑定事件和状态,使页面可交互
预渲染Pre-rendering构建时或请求时统称在浏览器执行前准备好 HTML 的做法,通常包含 SSG 与 SSR

三种渲染的请求链路

SSG:构建时生成,访问时分发

flowchart LR
    src[内容与数据] --> build[构建阶段]
    build --> html[静态 HTML]
    html --> cdn[CDN]
    cdn --> user[用户浏览器]

构建阶段把页面产物准备好,用户请求通常只经过 CDN。文章、帮助中心、营销落地页、文档和变化不频繁的目录页适合 SSG。页面依赖实时库存、用户身份或权限时,不能只靠 SSG 产出最终内容。

SSG 不代表页面完全没有动态能力。页面仍然可以在浏览器中调用 API;只是首个 HTML 在部署前已经生成。

SSR:请求时生成,服务端返回

flowchart LR
    user[用户浏览器] --> server[服务端或边缘运行时]
    server --> data[(数据源)]
    data --> server
    server --> html[HTML 响应]
    html --> user

服务端根据 URL、Cookie、权限和数据源生成 HTML,再返回浏览器。个性化首页、需要搜索引擎读取的动态页面、内容更新频繁的页面可以采用 SSR。

SSR 的首屏表现不只取决于渲染方式。服务端排队、数据查询、模板渲染和网络传输都计入响应时间;数据源慢时,SSR 反而可能让用户等待更久。页面返回后通常还要经过 Hydration,才能响应点击和输入。

CSR:浏览器加载后生成

flowchart LR
    user[用户浏览器] --> shell[HTML 外壳]
    shell --> js[下载并执行 JavaScript]
    js --> api[请求 API]
    api --> dom[生成页面 DOM]
    dom --> user

CSR 先返回一个页面外壳,浏览器下载 JavaScript、请求数据,再生成主要内容。后台系统、协作编辑器、复杂数据看板和登录后工作台常使用 CSR。

纯 CSR 页面把首屏内容放到了 JavaScript 执行之后。网络慢、设备性能弱或脚本体积大时,用户可能先看到空白、加载骨架或不完整页面。搜索引擎也可能读不到主要内容,因此内容型页面通常会加入 SSG、SSR 或其他预渲染方案。

SSR、SSG、CSR 怎么选

维度SSGSSRCSR
HTML 生成构建时请求时浏览器加载后
首个 HTML通常可直接展示内容通常可直接展示内容通常先拿到外壳
SEO 基础较好较好纯 CSR 需要额外处理
数据新鲜度取决于构建或重新生成周期可按请求获取较新数据可在浏览器请求最新数据
页面运行成本构建与 CDN 分发服务端或边缘计算静态资源分发加 API
交互启动常需要 Hydration常需要 HydrationJavaScript 就绪后开始
常见场景文档、博客、官网个性化页面、动态内容后台、编辑器、复杂工作台

真实项目常采用混合方案:官网和文档使用 SSG,商品或内容详情页使用 SSG 或按规则重新生成,个性化模块使用 SSR,复杂交互区域使用 CSR。React 应用还要另问:哪些组件在服务端执行(RSC),哪些必须在浏览器执行。

SPA、RSC 与三种渲染方式的关系

SPA 描述路由和页面切换方式:用户首次加载一个文档,后续导航通常由 JavaScript 接管。CSR 描述页面内容主要在哪里生成。RSC 描述组件代码在哪运行、是否下发到浏览器。三者经常同时出现,评审时要分开问。

  • SPA + CSR:常见于后台和工作台,首次返回应用外壳,路由与内容都在浏览器中处理。
  • SPA + SSR:首次请求由服务端输出内容,Hydration 后继续由客户端接管导航和交互。
  • SPA + SSG:构建时生成首屏或路由页面,浏览器加载后继续执行客户端路由。
  • RSC + 静态外壳:服务端组件在构建或请求时出 HTML / RSC 载荷,客户端组件负责交互;可与 SSG、SSR 或部分预渲染组合。
  • 多页应用 + SSR/SSG:每次导航获取新的 HTML,不属于 SPA,但仍可以使用 SSR 或 SSG。

产品经理要问的五个问题

  1. 用户第一次打开页面时,必须看到什么? 把关键内容放进服务端或构建时生成的 HTML,还是接受脚本加载后的等待?
  2. 内容允许多旧? 明确实时、分钟级、小时级还是发布后更新;SSG、ISR、SSR 的差异本质上包含缓存和失效策略。
  3. 页面是否依赖用户身份? 权限、Cookie、地域和个性化推荐通常要求请求时处理,或把个性化部分拆到客户端请求。
  4. 搜索引擎需要读取哪些内容? SEO 不只看是否使用 SSR,还要检查正文、标题、描述、结构化数据和链接是否出现在可抓取的 HTML 中。
  5. 故障时显示什么? 服务端超时、构建失败、缓存过期、API 不可用和 Hydration 错误都要有降级、监控与回滚方案。

常见黑话与真实含义

黑话需要继续追问
页面是 SSR是所有路由 SSR,还是只有首屏 SSR?后续交互是否由 CSR 接管?
这是静态站页面 HTML 是否 SSG?动态数据是否仍通过 API 获取?
CSR 对 SEO 不友好哪些页面需要 SEO?是否可以对这些路由使用 SSG、SSR 或预渲染?
SSR 首屏一定快服务端响应、数据查询、缓存命中和 Hydration 各自耗时多少?
上 ISR 就能实时更新失效触发条件是什么?允许用户看到多久的旧数据?重新生成失败怎么处理?ISR 只是 Next.js 的叫法,其他框架对应什么机制?
做成 SPA 以后体验更好用户是否接受首屏脚本加载?路由切换、浏览器后退、分享链接和无障碍怎么保证?
前端发版很快静态资源、服务端代码、API 和缓存分别如何发布与回滚?
我们用了 RSC哪些组件在服务端执行?哪些必须下发到浏览器?首屏 HTML 仍然是 SSG、SSR 还是部分预渲染?

给产品经理的架构速记

  • 内容优先:文档、博客、官网等页面优先考虑 SSG 或 ISR。
  • 个性化优先:需要身份、权限和请求上下文的内容考虑 SSR,或拆成静态外壳加 CSR 数据区。
  • 交互优先:复杂编辑、协作和数据操作优先考虑 CSR,但要单独治理首屏、脚本体积和失败状态。
  • 混合优先:一个站点不必全站统一渲染方式,按页面价值、数据时效和交互复杂度选择。

相关页面

来源说明

本文为前端工程通识整理,概念与框架实现以官方文档为准(访问日期 2026-09-04):