TL;DR

SSG 适合内容固定、无登录态博客;SSR 支持动态路由、实时数据。云图札记从 SSG 切到 SSR,核心原因是需要动态路由和实时数据。

两种渲染模式是什么

SSG(Static Site Generation)

构建时把每篇文章都生成静态 HTML 文件。访问时直接返回文件,不需要服务器计算。

优点:访问速度极快、可部署在任何静态托管、CDN 缓存友好。 缺点:每次内容更新都要重新构建、无法根据请求动态返回不同内容。

SSR(Server-Side Rendering)

每次请求时,服务器实时运行 Astro 代码生成 HTML 返回。

优点:支持动态路由、可读取请求头、实时数据。 缺点:需要运行环境、响应速度比静态文件慢、调试更复杂。

我为什么切到 SSR

最初用 SSG 模式,后来需要动态路由(/rss.xml 实时读取文章列表)和服务端重定向。SSG 无法做到。

切换只需改两行:

import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
  output: 'server',
  adapter: cloudflare(),
});

性能对比

指标SSGSSR(Edge)
TTFB<50ms80-200ms
构建时间30s-5min5-30s
动态内容不支持支持

TTFB 增加 100ms 左右,对博客可接受。好处是功能灵活度大幅提升。

混合模式

Astro 支持按页面选择渲染模式:

---
export const prerender = true;  // 这个页面走 SSG
---
<h1>静态页面</h1>

不写 prerender 就走 SSR。一套代码,两种模式。

写在

没有”最好”的渲染模式,只有”最适合当前需求”的模式。先想清楚需求,再选模式。

延伸阅读

种下你的想法

在花园里留下一条评论,和这篇文章一起生长。

COMMENTS