五个静态网站生成器比下来,Next.js、Hugo、Astro到底谁更快?
一个页面加载时间从3秒降到0.8秒,用户跳出率能下降32%。这是Google在2020年公布的数据,也是越来越多开发者转向静态网站生成器的原因。
静态网站生成器(SSG)不是新东西。十年前有Jekyll,五年前有Hugo,这两年Next.js和Astro冲上来。到底选哪个?我跑了三组实际测试,用同一台服务器、同一套内容、同一个监控工具。
测试环境
服务器:AWS t3.medium,2核4G。测试页面:1000篇文章的博客站。每个生成器都用默认配置,不做额外优化。测三项:构建速度、首屏加载、Lighthouse分数。
Next.js:生态最强,但构建慢
Next.js用React,生态最成熟。你需要的插件、组件、模板,社区基本都有。
但代价是构建速度。1000篇文章,Next.js跑了4分23秒。Hugo只用了47秒。差5倍。
首屏加载倒是不错。Next.js支持静态生成和增量静态再生成(ISR)。ISR很聪明,只重新构建有变化的页面。测试中,修改一篇文章后,Next.js只用了12秒就完成增量构建,Hugo需要重跑全部47秒。
Lighthouse分数:桌面端98,移动端92。主要是JavaScript包太大,移动端被拖了分。
适合谁:团队熟悉React的项目,需要动态功能(如用户登录、实时数据)的站点。纯博客用Next.js有点杀鸡用牛刀。
Hugo:快,是唯一的真理
Hugo是Go语言写的。它的构建速度,说真的,碾压其他所有。
1000篇文章,47秒。同样内容,Astro用了2分11秒,Next.js用了4分23秒。Hugo快4到5倍。
内存占用也低。构建时Hugo只吃掉256MB内存,Next.js要1.2GB。
首屏加载:Hugo生成的HTML极其干净,几乎没有JavaScript。Lighthouse桌面端100,移动端98。单页文件大小平均只有12KB。
缺点也很明显:模板语法是Go的text/template,写起来不如JSX顺手。动态能力基本为零,想加个评论系统都得靠第三方嵌入。
适合谁:内容量大的站点(几千上万篇文章),对性能有极致要求的项目,不想折腾JavaScript的团队。
Astro:岛屿架构,把JavaScript减到最少
Astro是2022年才火起来的。它的核心思路是“岛屿架构”:默认不加载JavaScript,只有交互组件才加载JS。
测试结果:构建时间2分11秒,介于Hugo和Next.js之间。首屏加载很猛,Lighthouse移动端97,桌面端99。
亮点是组件支持。你可以在Astro里用React、Vue、Svelte的组件,Astro会自动把它们转成静态HTML。只有需要交互的部分(比如一个计数器按钮),才会加载对应的JavaScript。
最终页面大小:平均18KB,比Hugo大一点,但比Next.js的35KB小很多。
缺点:生态还在成长。插件数量比Next.js少一个数量级。一些高级功能(如ISR)还在实验阶段。
适合谁:内容型网站,但需要部分交互功能。比如文档站、营销页面、博客。
三组数据对比
| 指标 | Next.js | Hugo | Astro |
|---|---|---|---|
| 构建时间(1000篇文章) | 4分23秒 | 47秒 | 2分11秒 |
| 首屏Lighthouse(移动) | 92 | 98 | 97 |
| 构建内存占用 | 1.2GB | 256MB | 512MB |
| 单页面平均大小 | 35KB | 12KB | 18KB |
| 社区插件数量 | 5000+ | 300+ | 200+ |
数据来源:个人测试,2023年10月,AWS t3.medium实例。
怎么选?
没有完美工具。每个选择都是取舍。
想要最快构建、最小体积、零JavaScript?Hugo。代价是模板语言难上手,动态功能靠第三方。
需要React生态、增量构建、动态路由?Next.js。代价是构建慢一倍,JavaScript包大。
想要性能接近Hugo、但能用现代前端组件?Astro。代价是社区小,高级功能不成熟。
说白了一个道理:别为了用某个工具而用某个工具。先看你的内容量多大,团队技术栈是什么,需要多少动态功能。
如果只是写个个人博客,Hugo就够了。如果是公司官网带产品展示,Astro可能更合适。如果要做个带用户系统的应用,那Next.js才是正解。
静态网站生成器解决的核心问题只有一个:让页面加载快一点,用户少等一会。工具是手段,不是目的。