Astro 7.4 上手:Rust 编译器与 Vite 8 落地后,构建时间终于能看清了

摘要

Astro 7.4.1 发布:编译器与 Markdown 管线改用 Rust,配 Vite 8 后构建快 15% 到 61%,新版可用 --timings 看耗时去向。

推荐
软件名称
Astro
版本
7.4.1
收费
免费
开源
开源
操作系统
WindowsmacOSLinux
更新时间
2026-10-21 15:57

Astro 7 这一轮的重心不在功能清单上,而在构建流程本身:把最慢的两段搬进 Rust,再把剩下那些说不清的地方交给一份耗时报告。

版本停在 7.4.1

当前稳定版是 7.4.1,发布于 2026 年 10 月 19 日。这条线的主干是两个节点:7.0 在 2026 年 6 月 22 日发布,7.4 在 10 月 15 日发布。项目以 MIT 许可证开源,仓库主语言是 TypeScript。

Rust 接管了最慢的两段

7.0 做的事可以一句话说完:把 astro 组件编译器整个换掉,从 Go 版改写为 Rust 版;把 Markdown 与 MDX 的处理也换成一条 Rust 管线;渲染引擎则由原来的方式改成基于队列的策略,把待渲染的片段更有效地排队。

官方给的理由是构建分三步,第一步最费时间——把页面、内容与客户端组件打成一个 JavaScript 包,再按预渲染页面逐个发起请求、落成 HTML。慢的那部分恰好是编译与 Markdown 处理,于是这两段被搬进了原生代码。默认的 Markdown 处理器也跟着换了,从原来那套插件组合改成自研管线。对只写标准 Markdown 的站点影响不大,对挂了一串插件改语法树的项目,这是需要逐个确认的地方。

Vite 8 和它带来的打包器

另一半提速来自 Vite 8。这一版 Vite 最大的变化是内置了一个用 Rust 写的打包器,把原来分工的两个工具并成一个,同时保留原有插件接口。合并之后,官方给了一个区间:整体构建时间快 15% 到 61%,个别站点快到两倍以上。

基准表更能说明分布:六千多页的文档站从 114.54 秒降到 73.53 秒,一万三千页的从 385.84 秒降到 326.11 秒。页数越多的站,百分比上的收益越小——因为页面渲染本身没被搬进 Rust,它占的比重上来了。收益大小取决于你的站有多少时间花在编译与 Markdown 上,而几千篇 Markdown 攒成的内容站,正好是编译占大头的那一类。

7.4 把构建变成一份报告

7.0 解决的是更快,7.4 解决的是快在哪里、慢在哪里。构建命令多了一个参数,跑完会打印明细:各阶段、各类插件、Markdown 处理与语法高亮、页面渲染、图片处理、集成,各项耗时与比重,还附带最慢页面的中位数与高位值。

官方用一个博客起始模板演示。模板只有九个页面,总耗时 2.61 秒,其中页面生成占 2.10 秒,即 80.6%;最慢的页面几乎全是套用文章布局的那几个,首页与订阅源都在毫秒级。问题指得很明确:布局里评论区先取评论、每条评论再取作者资料,两轮请求串在一起,每个页面都在等。

改成一次性并发取回、再把结果传下去之后,页面生成从 2.10 秒降到 1.13 秒,每篇文章的渲染时间减半。这个例子的价值不在那 1 秒,而在于它展示了没有报告时很难发现的东西——代码在编辑器里看起来毫无问题。

图片服务分成构建与运行时

7.4 允许图片服务配成两套:预渲染页面用一套,按需渲染页面用另一套。构建时有整台机器与完整运行环境,本地优化器最合适;按需渲染跑在服务器或边缘节点上,本地优化器未必能跑,图片 CDN 才是合理选择。此前只能二选一,或者交给适配器替你决定。为了让这件事成立,构建期用到的图片改由框架自己的管线统一跟踪,各家适配器不再各自复刻一套。

更严格的编译器意味着什么

换编译器不是纯粹的提速。新的 Rust 编译器对不合法的 HTML 语法更严格:未闭合的标签直接报错,非空元素必须有配套的闭合标签;语义上不合法嵌套不再被自动纠正,而是原样交给浏览器。

旧编译器会悄悄帮忙:自动闭合、调整顺序、把放错位置的节点挪出去。这些帮忙在某些情况下会造成难以调试的问题,所以新编译器选择不帮。代价是升级后可能看到以前没见过的报错,也可能发现渲染结果变了。实际做法很朴素:升级后先跑一遍构建,看到未闭合标签就补齐,看到渲染变化就回头查模板嵌套。模板规整的项目几乎无感,历史包袱重的项目则是一次整理。

两个实验开关和几条新约定

7.4 带了两个实验性能力。一个是并行预渲染,把静态页面渲染分摊到多个 worker 线程,默认用掉除一个之外的全部核心;每个 worker 都会增加构建的内存占用,内存吃紧或没有变快时应当把 worker 数调低。另一个是自定义重定向页:静态站没有服务器可以发重定向头,每次重定向都要生成一张带刷新指令的小页面,此前它的文字、样式与延迟都是固定的,新开关允许用自己的模板渲染,把来源、目标、状态码与延迟作为参数传进来。

几条新约定也值得记一笔:最低 Node.js 版本抬到 22.22.0;src/fetch.ts 成为保留文件名,高级路由会把它当配置自动引入,已有同名文件的项目需要改配置或改名;字体提供方新增一个可选回调,用来声明字族实际具备的字重、字形、子集与格式,配置里写了提供方给不出的值会提前收到警告——现在可选,下一个大版本会变成必需。

Astro 官方品牌壁纸:深色网格背景上方居中排列 Astro 字标与标志,下方是一道由蓝紫过渡到粉红的弧形光晕,象征 Astro 的弧线标志

它适合谁

官网把自己定位成「面向内容驱动型网站的 Web 框架」,服务的站点类型被点名为营销站、博客、电商站。核心设计是服务端优先:组件在服务端渲染,只把 HTML 送到浏览器,多余的 JavaScript 开销为零,需要交互的部分再用岛屿的方式单独加载。可扩展性上支持接入各类主流 UI 框架的组件,已有组件可以直接搬进来;内容侧提供内容集合,写进目录的 Markdown 与数据文件会自动获得类型安全与补全。

把它放进工具箱的理由通常不是某一项功能,而是构建时间与产物体积同时可控。7.0 把前者压下来,7.4 让前者变得可解释。

Astro 7 讲的故事很朴素:把慢的部分换成更快的语言实现,再把剩下说不清的部分做成一份能读的报告。前者靠一次重写完成,后者靠一个参数就够。值得记住的不是那些百分比,而是「构建变慢时先看报告,再决定改哪里」这个顺序。

Astro下载地址
支持的操作系统: Windows macOS Linux