面向内容型网站的Web框架Astro发布了7.0版本。这次更新几乎完全围绕构建性能展开,核心动作是把工具链全面转向原生代码:.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处理方面,Astro 7引入了名为Sätteri的Rust处理器,由核心团队成员Erika基于pulldown-cmark和Oxc构建。它内置了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的网站。我们也在开发增量构建,这应该会有所帮助。"
迁移路径与后续版本
迁移通过npx @astrojs/upgrade完成,v7升级指南提供了具体细节。Rust编译器、队列渲染、日志记录、缓存和高级路由的实验性标志均转为稳定功能;src/fetch.ts成为保留文件名;@astrojs/db被移除,改用Drizzle或node:sqlite;已弃用的astro:transitions内部功能也已移除。
随后发布的Astro 7.1侧重于控制能力而非速度。新增的CSP指令允许使用内联样式而无需放宽外部CSS策略;paginate()新增format函数,可在文件格式构建中重写next、prev、first和last URL;--ignore-lock标志恢复了运行第二个开发服务器的能力;实验性的collectionStorage: "chunked"标志会每隔10Mb拆分一次存储文件,以适应对文件大小设限的平台。
8月6日发布的Astro 7.2带来了此前预告的增量构建功能。在experimental.incrementalBuild标志下,路由可以通过getStaticPaths()为每个路径返回cacheKey来选择启用;对于内容集合,entry.digest是自然的选择。
与竞争对手相比,Astro的定位并未改变。Next.js 16已正式稳定用于生产构建的Turbopack,仍然是更重量级的应用框架;Astro则继续以内容驱动型网站为目标,默认不包含客户端JavaScript。真正发生变化的是,Astro的构建工具链现在采用了原生代码,缩小了与竞争对手一直在交付的Rust流水线之间的差距。
Astro是一个面向内容驱动型网站的开源Web框架,采用MIT许可证分发,并于2026年1月被Cloudflare收购。它默认在服务器端渲染组件,并允许团队通过使用React、Vue、Svelte、Solid或Preact构建的孤岛添加交互功能。
热门跟贴