SSR 是请求来时现渲染,SSG 则把渲染提前到构建时:博客文章、产品介绍、文档这类内容相对固定的页面,构建一次产出纯 HTML,之后直接丢到 CDN,访问速度拉满、服务器零开销。Hexo、Hugo、VitePress、Astro、Next.js 的 export 都属此列。
它的边界在于内容的动态性:如果页面依赖频繁变化的个性化数据,构建产物很快过期,重新构建的频率扛不住。所以实际项目常做混合——静态主体用 SSG,需要实时性的小块再客户端请求注入,这正是 islands 架构流行的原因。
// 构建时生成静态页面的极简思路(SSG 演示) var fs = require('fs'); var posts = [ { slug: 'hello', title: '第一篇', body: '你好,世界。' }, { slug: 'ssg', title: '什么是 SSG', body: '构建时生成静态 HTML。' } ]; posts.forEach(function (p) { var html = '<!doctype html><html><body>' + '<h1>' + p.title + '</h1><p>' + p.body + '</p>' + '<a href="/">返回首页</a></body></html>'; fs.writeFileSync('dist/' + p.slug + '.html', html); }); console.log('生成完毕:' + posts.length + ' 个静态页面');