Astro 7 的构建从 62.7 秒压到 24.2 秒——这次不是换机器,是把整条编译链路搬进了 Rust

Astro 官方的基准测试里,astro.build 自己的构建时间从 62.70 秒掉到了 24.24 秒。不是换了更快的机器,也不是把测试删掉了一半——是把整个 .astro 编译器用 Rust 重写了一遍,顺手连 Markdown 流水线、渲染引擎、打包器一起换了。这个数字意味着什么:一个 8000+ 页面的文档站,构建从 386.89 秒降到 261.94 秒,大概省下了两分钟。如果你每天要跑十几遍 CI,这就是每天省下半杯咖啡的时间——而且是白捡的。

这次动的是整条链路,不是某个环节

Astro 7 的性能提升来自四个一起换掉的部分:

  1. .astro 编译器用 Rust 重写。之前的实现是 Go,现在换成 Rust,解析用 oxc,CSS 作用域处理用 Lightning CSS。
  2. Markdown / MDX 换成新的 Rust 处理器 Sätteri。由核心成员 Erika 基于 pulldown-cmark 和 Oxc 构建,GFM、智能标点、标题 ID、数学公式、Wiki 链接全部内置,不再靠插件一层层挂上去。依赖数从 v6 的 247 个降到 v7 的 190 个。
  3. 渲染换成基于队列的引擎,不再是一口气把所有页面塞进内存。
  4. 底层换成 Vite 8 + Rolldown 打包器。Rolldown 是 Rust 写的,目标是同时替掉 esbuild 和 Rollup。

也就是说,你写 .astro 文件的体验没变,但从源码到产物的整条流水线,几乎每一段都被换成了更快的实现。

有一件事要提前知道:编译器变严格了

这是升级时最容易踩的坑——Astro 7 的编译器不再「帮你擦屁股」:

  • 未闭合的标签现在直接报错,而不是被静默修复
  • 非法的嵌套结构会原样保留,不再被悄悄纠正
  • 元素之间的空白处理,改成跟随 JSX 规则

如果你手上有一堆陈年的 .astro 文件,升级后可能第一次构建就红一片。这不是 bug,是设计——团队选择了「早报错」而不是「默默帮你改」。Hacker News 上就有人吐槽这对遗留项目「实在不怎么样」,但另一边也有人欢迎依赖数从 247 降到 190。

Markdown 换掉 unified 也引起了争议,有开发者说「仅仅为了构建速度就放弃 unified 让人相当不满」。核心成员 Erika 的回应是:新流水线是刻意做成可插拔的,unified 并没有消失,依赖 remark/rehype 的项目可以继续留在旧流水线上。

顺带加的东西

除了快,Astro 7 还补了几块:

  • 高级路由:新增 src/fetch.ts 入口,和 Hono 兼容,可以在请求进入页面管线之前拦截处理
  • 路由缓存正式稳定,并为 Netlify、Vercel、Cloudflare 提供了实验性 CDN 缓存提供商
  • 面向 AI 编码 agent 的改进astro dev --background 可以在后台跑 dev server,日志输出结构化 JSON,方便机器读取

你现在该做什么

如果你在维护 Astro 项目,可以按这个顺序动:

  1. 先看页面数——页面越多,这次升级的收益越明显;几十页的小站感受可能不大
  2. npx @astrojs/upgrade 升级,但先在分支上完整跑一次 build,重点看未闭合标签的报错
  3. 如果你用了 @astrojs/db,它已经被移除了,需要换到 Drizzle 或 node:sqlite
  4. 依赖 remark/rehype 的项目先别急着切 Markdown 流水线,旧管线还在
  5. 用了高级路由需求的话,试试 src/fetch.ts,能省掉不少中间件胶水代码

一句话总结:Astro 7 是一次纯性能导向的大版本,收益随项目规模放大,代价是编译器变严格、部分旧写法要改。大站值得升,小站可以先等等。

参考来源:

评论区

0 条评论

登录后可评论。

阿柯·前端架构 13 阅读