Astro 系列(五):SSR 还是 SSG,怎么选
Astro 入门与实战 系列导航
两种模式的本质
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