写点什么

Rust 再下一城:Astro 7 重写编译器与 Markdown 流水线

作者:Daniel Curtis
  • 2026-08-21
    北京
  • 本文字数:1703 字

    阅读完需:约 6 分钟

面向内容的 Web 框架 Astro 发布了 Astro 7。该版本几乎完全聚焦于构建性能,随后发布的两个次要版本又对其进行了扩展。

此次更新的核心是转向原生工具链。.astro 编译器已使用 Rust 重写,Markdown 和 MDX 处理迁移到新的 Rust 流水线,渲染切换到基于队列的引擎,框架现在则基于 Vite 8 及其 Rolldown 打包器运行。Astro 自己的基准测试显示,构建速度提升了 15% 至 61%:astro.build 的构建时间从 62.70 秒降至 24.24 秒,包含 8,431 个页面的 Cloudflare 开发者文档则从 386.89 秒降至 261.94 秒。

新编译器取代了此前的 Go 实现,使用 oxc 进行解析,并使用 Lightning CSS 处理作用域。它也更加严格。未闭合的标签现在会报错,而不是被静默修复;无效的嵌套会按原样传递;元素之间的空白则遵循 JSX 规则。

Markdown 现在通过 Sätteri 运行。这是由核心团队成员 Erika 基于 pulldown-cmark 和 Oxc 构建的 Rust 处理器,内置 GitHub Flavored Markdown、智能标点、标题 ID、数学公式和 Wiki 链接,而不是通过插件附加这些功能。依赖 remark 或 rehype 的项目可以继续使用旧流水线。

除速度之外,Astro 7 还通过兼容 Hono 的 src/fetch.ts 入口点增加了高级路由功能,正式稳定了路由缓存,并为 Netlify、Vercel 和 Cloudflare 提供实验性 CDN 提供商,同时还为 AI 编码智能体引入了 astro dev --background 和 JSON 日志。

Hacker News 上对该版本的反应褒贬不一,发布帖子获得了 211 分。一位评论者对依赖项数量从 v6 的 247 个降至 v7 的 190 个表示欢迎,另一位评论者则认为,对于受困于旧版 .astro 文件的团队而言,严格的 HTML 编译“实在不怎么样”(原文链接)

一位开发者对 Markdown 切换提出异议,称“仅仅为了提升构建速度”就放弃 unified“令人相当不满”。这促使核心团队成员 Erika 确认,该流水线被刻意设计为可插拔形式,unified 并不会消失。

Williams 报告称,他们自己的构建速度反而略有下降,维护者 Matthew Phillips 对此回应道:

有多少个页面?性能改进主要面向较大型的网站(数千个页面),尤其是大量使用 MDX 的网站。

我们也在开发增量构建,这应该会有所帮助:https://github.com/withastro/roadmap/issues/1388

迁移通过 npx @astrojs/upgrade 完成,v7 升级指南介绍了具体细节。Rust 编译器、队列渲染、日志记录、缓存和高级路由的实验性标志均转为稳定功能;src/fetch.ts 成为保留文件名;@astrojs/db 被移除,改用 Drizzle 或 node:sqlite;已弃用的 astro:transitions 内部功能也已移除。

随后又发布了两个次要版本。7 月 16 日发布的 Astro 7.1侧重于控制能力,而不是速度。新的 script-src-elem、script-src-attr、style-src-elem 和 style-src-attr CSP 指令允许使用内联样式,而无需放宽针对外部 CSS 的策略;paginate() 新增 format 函数,可以在文件格式构建中重写 next、prev、first 和 last URL。--ignore-lock 标志恢复了运行第二个开发服务器的能力;glob() 加载器的 deferRender 选项以放弃跨构建 HTML 缓存为代价,降低大型集合的内存占用;实验性的 collectionStorage: "chunked" 标志则会每隔 10Mb 拆分一次 .astro/data-store.json 存储,以适应对文件大小设有限制的平台。

Astro 7.2 于 8 月 6 日发布,带来了 Phillips 此前预告的增量构建功能。在 experimental.incrementalBuild 标志之后,路由可以通过 getStaticPaths() 为每个路径返回一个 cacheKey 来选择启用该功能;对于内容集合,entry.digest 是自然的选择:

与竞争对手相比,其定位并未改变。Next.js 16 已正式稳定用于生产构建的 Turbopack,并且仍然是更重量级的应用框架;Astro 则继续以内容驱动型网站为目标,默认不包含客户端 JavaScript。真正发生变化的是,Astro 的构建工具链现在采用了原生代码,缩小了与竞争对手一直在交付的 Rust 流水线之间的差距。

Astro 是一个面向内容驱动型网站的开源 Web 框架,采用 MIT 许可证分发,并于 2026 年 1 月被 Cloudflare 收购。它默认在服务器端渲染组件,并允许团队通过使用 React、Vue、Svelte、Solid 或 Preact 构建的孤岛添加交互功能。

原文链接:https://www.infoq.com/news/2026/08/astro-7-release-speed/