Astro 7.0 发布说明 / 新特性

Astro 7.0 release notes / what's new

Astro 7.0 专注于大规模性能提升和开发者体验,特别针对大型网站的构建速度。通过使用 Rust 重写核心组件并集成 Vite 8 与 Rolldown 打包器,Astro 7 的构建时间减少了 15% 到 61%。

Build Performance and Rust Integration

通过将构建过程中计算量最大的部分移至原生 Rust 代码,Astro 7 的构建时间显著缩短。在 MacBook Pro M4 Pro 上的基准测试显示,某些网站的构建速度现在比以前快了两倍以上,Astro 文档网站的构建时间从 114.54s 降至 73.53s。

Rust-Based .astro Compiler

.astro 组件编译器已完全使用 Rust 重写,取代了之前的 Go 实现。这一转变引入了处理标记语言(markup)时的几项关键变化:

  • Removal of HTML Correction: 编译器不再静默地重写标记语言以使其成为“有效 HTML”,这意味着它不会自动闭合标签或重新排序元素。
  • JSX-style Strictness: 未闭合的标签和未终止的属性现在会触发错误,而不是被静默修正。
  • Whitespace Handling: 元素之间的空格现在遵循 JSX 约定进行折叠;若要保留空格,需要使用显式表达式(例如, {' '})。

Sätteri: Rust-Powered Markdown and MDX

Astro 7 使用 Sätteri 取代了默认的 Markdown 和 MDX 流水线,这是一个由 Rust 驱动的处理器。这消除了 JavaScript-based unified 流水线(remark/rehype)的开销,而这通常是 Markdown 重度型网站的性能瓶颈。Sätteri 内置支持了以前需要插件的功能,包括:

  • GFM (tables, footnotes, task lists)
  • Smart punctuation and Heading IDs
  • Container directives and Math
  • Frontmatter (YAML, TOML), Superscript/Subscript, and Wikilinks

对于需要特定 remarkrehype 插件的项目,可以通过 @astrojs/markdown-remark 访问使用基于 unified 的流水线。

Stable Queued Rendering

Queued rendering 现在已进入稳定阶段并成为默认引擎,为表达式密集的页面提供约 2.4× 的速度提升。与之前的递归渲染方式不同,新引擎使用队列/栈和单循环来渲染节点,从而减少了内存消耗并提高了执行速度。

Vite 8 and Rolldown

Astro 7 升级到了 Vite 8,其中引入了 Rolldown,这是一个基于 Rust 的打包器,旨在取代 esbuild 和 Rollup。据报告,Rolldown 的速度比 Rollup 快 10-30×,同时保持了与 Rollup 和 Vite 插件 API 的兼容性。由于存在一个能自动转换 esbuildrollupOptions 设置的兼容层,大多数 Astro 项目无需更改配置即可实现更快的构建。

Advanced Routing and Request Control

Astro 7 引入了 src/fetch.ts 入口点,允许开发者对请求流水线进行完全控制。这使得开发者可以在请求到达 Astro 内部路由之前实现自定义逻辑——例如身份验证或 API 代理。

该 API 与 Hono 兼容,允许开发者使用 Hono 中间件来组合请求流水线。例如,开发者现在可以确保身份验证中间件在 Astro Actions 运行之前运行,或者仅对页面渲染进行计时中间件的包装。

Route Caching and CDN Integration

Route caching 现在已进入稳定阶段,通过 Astro.cache 或配置中的声明式 routeRules 提供了一个平台无关的 API,用于控制按需渲染的响应。

CDN Cache Providers

Astro 7 引入了针对 Netlify, Vercel, 和 Cloudflare 的实验性 CDN 提供商。这些提供商将缓存指令直接推送到宿主机的边缘网络,允许在不调用服务器函数的情况下直接服务于缓存命中。这些通过适配器的 /cache 入口点进行配置(例如, cacheNetlify(), cacheVercel(), 或 cacheCloudflare())。

AI-Assisted Development Enhancements

Astro 0.7 引入了专门为 AI 编码代理(coding agents)设计的特性,以改善其与开发服务器的交互。

Background Dev Server

为了防止 AI 代理在长时间运行的进程中挂起,Astro 7 添加了 astro dev --background。此模式下,服务器作为受管理的后台进程启动,并提供一个 lockfile 以防止重复实例。Astro 可以自动检测到它是否正在 AI 代理中运行并默认启用此模式。代理可以使用 astro dev stop, astro dev status, 和 astro dev logs 来管理服务器,并通过 /_astro/status 接口进行健康检查。

Structured JSON Logging

JSON 日志记录现在可以通过 astro dev --json 或通过 logHandlers.json() 配置实现。这为 AI 代理和生产环境日志聚合服务(例如, Kibana, CloudWatch, Grafana/Loki)提供了机器可读的日志,取代了之前的以人为中心、格式化的输出。

Sources