跳转至

前端渲染技术与黑话

前端渲染技术与黑话

页面 HTML 在哪里生成、什么时候生成,决定首屏速度、SEO、数据新鲜度、服务器成本和交互启动方式。SSGSSRCSR 不是框架名称,同一站点可以按页面和组件混合使用。

先看 HTML 的生成时机

flowchart LR
    q[页面请求] --> c{HTML 何时生成?}
    c -->|构建时| ssg[SSG<br>部署前生成]
    c -->|请求时| ssr[SSR<br>服务端生成]
    c -->|浏览器加载后| csr[CSR<br>客户端生成]
    c -->|按需重新生成| isr[ISR<br>静态输出+重新验证]

核心区别是:SSG 在构建时生成,SSR 在请求时生成,CSR 由浏览器加载 JavaScript 后生成,ISR 在静态输出与重新生成之间折中

术语速查

术语全称生成时机典型特点
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,增量静态再生成首次静态生成,之后按时间、请求或事件重新生成保留静态页面的分发效率,同时更新部分内容;失效规则、重新生成时机和短暂旧数据需要明确
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/ISR,个性化模块使用 SSR,复杂交互区域使用 CSR。

SPA 与三种渲染方式的关系

SPA 描述路由和页面切换方式:用户首次加载一个文档,后续导航通常由 JavaScript 接管。CSR 描述页面内容主要在哪里生成,两者经常同时出现,但不是同一个概念。

  • SPA + CSR:常见于后台和工作台,首次返回应用外壳,路由与内容都在浏览器中处理。
  • SPA + SSR:首次请求由服务端输出内容,Hydration 后继续由客户端接管导航和交互。
  • SPA + SSG:构建时生成首屏或路由页面,浏览器加载后继续执行客户端路由。
  • 多页应用 + 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 就能实时更新失效触发条件是什么?允许用户看到多久的旧数据?重新生成失败怎么处理?
做成 SPA 以后体验更好用户是否接受首屏脚本加载?路由切换、浏览器后退、分享链接和无障碍怎么保证?
前端发版很快静态资源、服务端代码、API 和缓存分别如何发布与回滚?

给产品经理的架构速记

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

相关页面

来源说明

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