1. Astro 的 Islands 架构如何实现"零 JS 默认"与部分水合,相比 SSR 框架的优势?
Astro 的 Islands 架构如何实现"零 JS 默认"与部分水合?相比传统 SSR 框架有何优势?
- 默认静态 HTML 输出与零 JS 原则
- client:* 指令的按需水合机制
- 相比整页水合 SSR 框架的体积与 TTI 优势
Astro 的默认渲染策略是"零 JS":所有组件在构建/SSR 时渲染为纯静态 HTML,页面默认不携带任何框架 JavaScript,内容完整、爬虫可直接读取。需要交互的组件通过 client 指令标注为"岛屿"(client:load 立即水合、client:visible 进入视口水合、client:idle 空闲时水合、client:only 仅客户端渲染),Astro 为每个岛屿生成独立脚本 chunk,只在触发条件满足时加载并水合该岛屿,其余区域始终保持零 JS。
相比整页水合的 SSR 框架(Next.js/Nuxt 默认全量水合),优势:首屏 JS 体积大幅缩减(只加载岛屿及其依赖)、TTI 更快、主线程更空闲,SEO 不受影响(HTML 完整),且天然支持多框架混用。代价:岛屿之间状态与事件跨边界协作需要显式设计,动态交互区域的体验与 SPA 有差距,高交互复杂应用需要评估。选型上,内容型、营销型、文档型站点收益最大。
本题考察 Astro 架构的核心主张。回答要点:静态 HTML 默认输出、client 指令驱动的按需水合、与整页水合方案在体积/TTI/SEO 上的对比,并客观指出跨岛屿协作的代价。
---
import Counter from '../components/Counter.jsx';
---
<Counter client:visible />