Skip to content
导航

Astro

Astro 预设是一个SSG(Static Site Generation,静态站点生成)框架,可以通过增加适配器支持SSR。

它支持自己的服务端模板语言astro,也支持React、Vue、Svelte等前端UI框架的服务端渲染。

与这些UI框架配套的SSR框架认为你服务端渲染的页面一定是一个SPA应用不同,Astro 是一个 MPA 框架,MPA与SPA的区别在于路由逻辑是做在服务端还是客户端。

SPA的收益在于后续的导航更快,代价是首次更慢。Astro选择了首次更快的 MPA ,宣称加载时间对比Next.js快34%

Demo

通过 create-astro 创建的代码 Demo 仓库

shell
npm create astro@latest

将应用配置为Node SSR 并集成 Vue 3。

在不运行客户端JS代码的情况下,生产环境构建后,客户端没有加载JS文件。
在运行客户端JS代码的情况下,生产环境构建后,客户端加载的构建产物JS总大小59.2KB

client JS

客户端JS分为三部分

  • 内联JS
    • 是一段已编译压缩过的JS,在Astro构建时按需拼接
    • 实现孤岛架构,根据配置加载孤岛组件
  • 孤岛组件JS:运行时JS + 组件代码JS
    • 运行时JS:根据UI框架挂载节点
    • 组件代码JS:编译后的ES模块
  • UI框架JS
    • UI框架的完整运行时,以ES模块的方式被孤岛组件JS依赖和加载

孤岛架构

由于前端UI框架用于SSR需要水合,而这个水合过程是对SSR页面上所有待水合内容的处理,导致页面内容越多,水合用时越长。

孤岛架构将待水合的内容拆分为“孤岛”,无需等待所有内容加载完后才能进行水合响应交互,更可以细粒度调整水合的优先级、按需水合。

这种做法像“微前端”,将应用程序分解为独立单元分别处理。

参考资料