你好,Astro:我为什么用它搭博客
搭建这个博客之前,我对比了三个方向:VitePress、Vue SPA 和 Astro。最后选了 Astro, 不是因为它的星星最多,而是因为它在一个问题上给出了最诚实的答案 —— 一个内容站点到底需要多少 JavaScript?
默认零 JS 是什么体验
Astro 组件在构建时就把页面渲染成完整 HTML,浏览器拿到的是”熟饭”: 不需要等框架下载、解析、水合,文字和图片直接呈现。
只有真正需要交互的地方,才用”岛屿”按需注水:
---
import Search from "../components/Search.astro";
---
<!-- 只有这个组件会加载自己的 JS,页面其余部分仍是纯 HTML -->
<Search client:load />
client:load、client:idle、client:visible 三种水合时机,
把”什么时候付 JS 成本”变成显式决策而不是默认账单。
内容即数据
Markdown 文章通过内容集合(Content Collections)进入构建管线, frontmatter 由 Zod schema 校验:
- 写错字段名,构建当场失败
- 日期格式非法,构建当场失败
- 类型不对,编辑器里就有红色波浪线
错误在构建期暴露,而不是用户看到一个空白页面之后。
构建期失败的错误是最便宜的错误 —— 它还没见过任何用户。
代价是什么
当然要付出一些东西:交互复杂的组件要自己管理状态, 没有 React 那样现成的生态零件。但对一个以阅读为核心的博客, 这些零件本来就不该进场。
如果你也在选型,我的建议很简单:先问页面需不需要 JS, 再问用哪个框架。顺序反了,就是拿锤子找钉子。