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
对于需要特定 remark 或 rehype 插件的项目,可以通过 @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 的兼容性。由于存在一个能自动转换 esbuild 和 rollupOptions 设置的兼容层,大多数 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)提供了机器可读的日志,取代了之前的以人为中心、格式化的输出。