Astro 是一个现代化的静态站点生成器,它的核心理念是"零 JavaScript 默认"。这意味着 Astro 默认只输出纯 HTML,不会向浏览器发送任何客户端 JavaScript,除非你明确要求。
核心特性:
-
岛屿架构(Islands Architecture):这是 Astro 的核心概念。页面上的每个组件都是一个"岛屿",默认情况下是静态的 HTML。只有当你明确使用
client:*指令时,组件才会变成交互式的 JavaScript 岛屿。 -
多框架支持:Astro 允许你在同一个项目中混合使用 React、Vue、Svelte、Preact、SolidJS 等前端框架。你可以在一个 Astro 组件中使用 React,在另一个组件中使用 Vue。
-
性能优化:通过默认输出纯 HTML,Astro 网站具有极快的加载速度和优秀的 SEO 表现。
-
内容优先:Astro 特别适合内容驱动的网站,如博客、文档、营销网站等。
工作原理:
astro--- // 服务端代码区域(只在构建时运行) const data = await fetch('https://api.example.com/data'); const posts = await data.json(); --- <!-- 客户端代码区域(输出到 HTML) --> <h1>我的博客</h1> <ul> {posts.map(post => ( <li>{post.title}</li> ))} </ul>
Astro 使用 --- 分隔符将组件分为服务端代码和客户端模板。服务端代码在构建时执行,可以执行异步操作、获取数据等;客户端模板则被编译成 HTML。
与其他框架的区别:
- 与 Next.js 不同,Astro 默认不进行客户端水合(hydration),除非你明确要求
- 与传统的静态站点生成器(如 Jekyll、Hugo)不同,Astro 支持现代前端框架和组件化开发
- Astro 的构建输出是纯 HTML,而不是包含大量 JavaScript 的应用
这种设计使得 Astro 成为构建高性能、内容驱动网站的理想选择。