Astro 系列(五):SSR 还是 SSG,怎么选

Astro 入门与实战 系列导航

  1. (一)Astro 是什么,解决什么问题
  2. (二)项目结构与开发约定
  3. (三)Island 架构——为什么默认零 JavaScript
  4. (四)内容驱动还是应用驱动——Astro 的边界
  5. (五)SSR 还是 SSG,怎么选 ← 当前
  6. (六)集成生态——从官方到社区
  7. (七)能用 Astro 做什么——扩展玩法全景
  8. (八)View Transitions——让 MPA 拥有 SPA 体验
  9. (九)Middleware、API 端点与认证
  10. (十)第三方服务拼装——评论、搜索、分析
  11. (十一)框架对比(上)——全栈方向
  12. (十二)框架对比(下)——静态站点方向
# SSR vs SSG 决策 ## 两种渲染模式 ### SSG 原理与优势 ### SSR 原理与优势 ### 核心差异对比 ## 混合模式 ### 按路由配置 output ### 静态优先 + 动态例外 ### hybrid 模式 ## 选择依据 ### 内容更新频率 ### 个性化需求 ### SEO 要求 ### 构建时间 ### 运维成本 ## 边缘渲染 ### CF Workers ### Deno Deploy ### Vercel Edge ### 延迟优势 ## 适配器生态 ### Node 适配器 ### Vercel 适配器 ### Netlify 适配器 ### Cloudflare 适配器

两种模式的本质

SSG(Static Site Generation):构建时生成所有 HTML。部署后每个页面是静态文件,通过 CDN 分发。任何用户请求同一个 URL,得到完全相同的 HTML。

SSR(Server-Side Rendering):每次请求时在服务端生成 HTML。不同用户、不同时间访问同一个 URL,可能得到不同的内容。

区别不在于"哪个技术更先进",而在于渲染发生在什么时刻——构建时(SSG)还是请求时(SSR)。

SSG 的优势与代价

优势:

  • 速度极致:CDN 分发的静态 HTML 是最快的 web 内容形态
  • 零服务器:托管在 GitHub Pages、Cloudflare Pages 等纯静态平台,零运维
  • 安全性高:无服务端运行时,攻击面极小
  • 成本低:大多数静态托管平台有慷慨的免费额度

代价:

  • 内容更新 = 重新构建:发布新文章要重新 build 整个站点
  • 无个性化:每个用户看到的内容完全一样
  • 构建时间随内容量线性增长:5000 篇文章的站点,build 可能需要几分钟

SSR 的优势与代价

优势:

  • 即时内容更新:发布即生效,不需要重新构建
  • 个性化:可以根据用户身份、地区、时间生成不同内容
  • 按需渲染:只渲染被访问的页面,不遍历所有内容
  • API 集成:可以在渲染时实时查询数据库或第三方 API

代价:

  • 需要服务器:必须有一个持续运行的 Node.js 服务
  • 延迟增加:每次请求都要等待服务端处理
  • 成本更高:服务器实例 + 流量费用
  • 冷启动问题:Serverless 环境下首次请求慢

Astro 的混合模式:按页面粒度选择

Astro 的独特之处在于不强制全站统一模式。你可以在同一个项目中,按页面粒度选择输出方式:

  • 博客文章页 → SSG(内容不变,不需要个性化)
  • 搜索页 → SSR(搜索结果因人而异)
  • 用户仪表盘 → SSR(需要登录状态)
  • 关于页面 → SSG(纯静态,万年不变)

这种混合策略让你获得两全其美的结果:静态页面享受 CDN 速度,动态页面保持灵活性。

如何做选择

用这三个维度判断:

内容更新频率:每天更新 → SSR;每周更新 → SSG 够用;每月更新 → SSG 完全没问题。

个性化程度:需要登录、个性化推荐、A/B 测试 → SSR;所有人看一样的内容 → SSG。

构建时间容忍度:内容量 < 500 篇 → SSG 无压力;500-2000 篇 → SSG + 增量构建可用;> 2000 篇 → 考虑 SSR 或混合模式。

边缘渲染:第三种选项

边缘渲染(Edge Rendering)是 SSR 的进化版——服务端渲染不在单一数据中心执行,而是在全球边缘节点上执行。用户请求被路由到离他最近的数据中心。

Astro 通过 adapter 支持 Cloudflare Workers、Deno Deploy、Vercel Edge Functions 等边缘平台。对于全球用户分布的场景,边缘渲染能显著降低延迟。

但代价是边缘环境的限制:有限的 CPU 时间、更小的内存、受限的 Node.js API。不是所有应用都能迁移到边缘。

延伸阅读

实操清单

  • 评估自己项目的内容量,决定 SSG 是否够用
  • 如果有动态需求,列出需要 SSR 的具体页面
  • 了解 Cloudflare Pages 和 Vercel 的免费额度
  • 尝试在 astro.config.mjs 中切换 output 模式,对比差异

created by:codex on deepseek v4 pro