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页面上所有待水合内容的处理,导致页面内容越多,水合用时越长。
孤岛架构将待水合的内容拆分为“孤岛”,无需等待所有内容加载完后才能进行水合响应交互,更可以细粒度调整水合的优先级、按需水合。
这种做法像“微前端”,将应用程序分解为独立单元分别处理。