从零到独立建站

Astro 实战教程(更新中)

|

输入关键词,开始搜索

↑↓ 选择 打开 esc 关闭
沉浸

初识Astro —— 新一代静态页面之王

在开始写代码之前,先理解 Astro 是什么、为什么它与众不同,以及 Islands Architecture 的核心思想。

在动手敲代码之前,我们先花点时间搞清楚:Astro 到底是什么? 它跟 React、Vue 有什么不同?为什么有人说它是”前端框架里的异类”?最重要的是,我们要理解 Islands Architecture(群岛架构) 这个让 Astro 与众不同的核心思想。

前置知识

要跟上本教程,你需要具备以下条件:

  • 了解 HTML/CSS/JS 的基础知识(能写一个简单的静态网页)
  • 熟悉基本的终端命令(比如 cdnpm 之类的操作)
  • 电脑上安装了 Node.js 18+(还没装的话,去 nodejs.org 下载 LTS 版本即可)
Tip

如果你完全没用过终端,也不用担心。我们在需要输入命令的地方都会给出详细的步骤说明,你跟着做就行。

为什么选 Astro?

想象一下这个场景:你打开一个博客网站,页面上主要是一篇文章、几张图片、一些导航链接。按理说,这种以内容为主的页面应该加载得飞快才对——毕竟它 mostly 就是文字和图片嘛。

但现实往往是:你打开页面,先白屏几秒,然后看到一个 loading 动画转啊转,最后内容才慢慢显现出来。为什么会这样?

因为现在很多网站都是用 SPA(单页应用) 的方式构建的。所谓 SPA,就是整个网站只有一个 HTML 文件,所有的内容都是通过 JavaScript 动态渲染出来的。浏览器要先下载、解析、执行一大堆 JavaScript 代码,才能显示出页面内容。这就好比你只是想看一篇报纸文章,但必须先组装一台印刷机才能开始阅读——是不是有点荒谬?

Astro 的想法很简单:为什么要把事情搞这么复杂呢?

Astro 的核心理念可以用一句话概括:默认不发送任何 JavaScript 到浏览器。是的,你没听错——零 JavaScript。Astro 会在服务器端(或构建时)把页面渲染成纯静态 HTML,然后直接发给浏览器。浏览器拿到 HTML 就能立刻显示内容,不需要等待任何 JavaScript 执行。

那交互性怎么办?比如一个点击按钮、一个轮播图、一个搜索框——这些总需要 JavaScript 吧?

这就是 Astro 的聪明之处:它只给真正需要交互的部分添加 JavaScript,其他部分保持纯静态 HTML。这种”按需水合”(selective hydrate)的方式,让 Astro 网站既拥有闪电般的加载速度,又不失交互能力。

我们把这种理念叫做 content-first”(内容优先)。如果你的网站主要任务是展示内容——博客文档作品集营销页面——那么 Astro 几乎是为你量身定做的。

前端渲染方式的演进

要理解 Astro 的独特之处,我们不妨先看看前端界这些年的渲染方式是怎么演变的。

渲染方式首屏性能SEO交互性
SSR(服务端渲染)★★★ 快★★★ 好★★ 需 hydrate
CSR(客户端渲染/SPA)★ 慢★ 差★★★ 好
SSG(静态生成)★★★ 最快★★★ 最好★ 无
Astro(Islands)★★★ 最快★★★ 最好★★★ 按需

来逐个解释一下:

  • SSR(Server-Side Rendering,服务端渲染):每次请求都在服务器上动态生成 HTML。首屏快、SEO 好,但页面加载后还需要执行 JavaScript 来“激活”交互功能(这个过程叫 hydrate,中文常译为“水合”),所以交互性上差了一点点。

  • CSR(Client-Side Rendering,客户端渲染):也就是 SPA 的做法。浏览器下载一个空 HTML 和一大堆 JS,然后在浏览器里渲染页面。交互体验很流畅,但首屏慢、SEO 差——搜索引擎爬虫可能看不到内容。

  • SSG(Static Site Generation,静态生成):构建时就把所有页面生成静态 HTML。首屏最快、SEO 最好,但默认没有任何交互性,全是“死”的页面。

  • Astro(Islands 架构):继承了 SSG 的所有优点(纯静态 HTML,首屏飞快,SEO 完美),同时通过“群岛”机制,只在需要的地方添加 JavaScript 交互,同时具备三种渲染方式的优点,堪称“我全都要”。

Islands Architecture 详解

现在我们来聊聊 Astro 最核心的创新——Islands Architecture(群岛架构)

想象一片宁静的大海。海面上大部分区域都是平静的、没有波澜的水面——这就是你的网页中静态的 HTML 内容。文章段落、图片、标题、导航链接……这些不需要交互的元素,就像平静的海水一样,纯粹、轻盈、毫无负担。

而在这片大海中,散落着几座小岛——这些就是需要交互的组件。比如一个评论表单、一个图片轮播、一个主题切换按钮。每座小岛都是自给自足的:它只携带自己需要的 JavaScript,不影响周围的海面。

这就是 Islands Architecture 的精髓:

  • 大海 = 静态 HTML(快速、无 JavaScript、对搜索引擎友好)
  • 岛屿 = 交互式组件(选择性水合,只在需要的地方加载 JS)
  • 每个岛屿之间相互独立,一个岛屿的 JavaScript 不会拖累其他部分
  • 页面加载时,大海(静态内容)瞬间呈现,岛屿(交互组件)可以稍后”激活”
Info

hydrate(水合) 是什么?简单来说,就是给静态 HTML “注入生命力”的过程。一个 React 组件在服务器端渲染成静态 HTML 后,看起来是对的,但点击它不会有反应。hydrate 就是在浏览器里重新执行一遍组件的 JavaScript,让它”活”起来,能够响应用户的点击、输入等操作。

传统 SPA 的做法是:把整个页面都 hydrate 一遍,不管需不需要交互。而 Astro 的做法是:“这个区域是纯展示用的?好,不用 hydrate。那个按钮需要点击?好,只 hydrate 那一小块。“这种精准打击的方式,大幅减少了浏览器需要执行的 JavaScript 量。

谁适合 Astro?谁不适合?

没有银弹,Astro 也不是万能的。我们来诚实地说说它适合和不适合的场景。

Astro 非常适合:
  • 博客、文档、作品集网站 —— 内容为王,加载速度至关重要
  • 内容营销网站 —— SEO 是命脉,Astro 的静态 HTML 对搜索引擎极其友好
  • Landing Pages(落地页) —— 首屏加载速度直接影响转化率
  • 企业官网 —— 大部分是展示内容,偶尔有几个交互组件
Astro 不太适合:
  • 复杂的 SPA(单页应用) —— 比如一个功能丰富的后台管理系统,页面之间频繁切换、大量状态共享,这种场景传统的 React/Vue SPA 更合适
  • 实时协作工具 —— 比如在线文档协同编辑、实时白板,需要大量客户端状态和 WebSocket 通信
  • 重度交互的仪表盘 —— 数据可视化大屏、复杂的过滤和排序交互,这些场景需要大量 JavaScript 持续运行
Tip

其实 Astro 也能做交互复杂的页面——它支持在页面中嵌入 React、Vue、Svelte 等框架的组件。但如果你整个应用都是高度交互的,那用 Astro 就有点”杀鸡用牛刀”了,不如直接用那些框架本身。

本章小结

让我们用三句话总结本章的核心要点:

  1. Astro = SSG + 选择性水合:默认输出纯静态 HTML,只在需要的地方添加 JavaScript,兼顾速度和交互。

  2. Islands Architecture = 只给需要交互的部分 hydrate:想象大海中的岛屿——平静的海面是静态 HTML,几座小岛是交互组件,各不相扰。

  3. 内容型网站最适合 Astro:如果你的网站主要任务是展示内容,Astro 几乎是最佳选择;如果是重度交互应用,建议考虑其他方案。

挑战练习(可选)

去 Astro 官方的 Showcase 页面 逛逛,找 3 个你用 Astro 搭建的网站,然后思考:

  1. 这个网站主要是什么类型的?(博客?文档?作品集?)
  2. 页面上有哪些部分是”静态的大海”,哪些是”交互的岛屿”?
  3. 为什么 Astro 是构建这个网站的好选择?

这个练习不需要提交答案,主要是帮你建立直觉——看到网站时,能自动在脑海中划分”海”与”岛”的边界。这种直觉在后续学习中会非常有用。


好了,理论部分到此结束。下一章,我们将真正动手,创建你的第一个 Astro 项目。

未知标题
00:00
00:00
播放列表