🏝️ 什么是 Island?
Island 是页面上一个独立的交互式 UI 组件,周围是静态 HTML。只有 Island 需要加载 JavaScript。
🎯 架构优势
- 静态内容零 JS,加载极快
- 交互组件独立水合
- 并行加载,互不阻塞
- 按优先级控制加载时机
📋 Client 指令
client:load
页面加载时立即水合,适用于关键交互组件:
astro
<Header client:load />
client:idle
浏览器空闲时水合,适用于低优先级组件:
astro
<Analytics client:idle />
client:visible
进入视口时水合,适用于折叠区域:
astro
<ImageCarousel client:visible />
client:media
匹配媒体查询时水合:
astro
<MobileMenu client:media="(max-width: 768px)" />
client:only
跳过服务端渲染,纯客户端渲染:
astro
<Chart client:only="react" />
📊 性能对比
| 场景 | 传统 SPA | Astro Islands |
|---|---|---|
| 博客首页 | 加载完整 React | 0KB JS |
| 带轮播图 | 加载完整 React | 仅轮播组件 JS |
| 电商详情页 | 加载完整 Vue | 仅购物车/评论 JS |
🚀 最佳实践
- 静态内容不用 client 指令
- 关键交互用 client:load
- 折叠内容用 client:visible
- 分析追踪用 client:idle
- 依赖浏览器 API 用 client:only