Astro 7.0 版本說明 / 新功能
Astro 7.0 版本說明 / 新功能
Astro 7.0 專注於大幅提升效能與開發者體驗,特別針對大型網站的建置速度進行優化。透過將核心元件改寫為 Rust,並整合 Vite 8 與 Rolldown 打包工具,Astro 7 可將建置時間縮短 15% 至 61%。
建置效能與 Rust 整合
在 Astro 7 中,將建置流程中最耗費計算資源的部分移植至原生 Rust 程式碼,顯著降低建置時間。於 MacBook Pro M4 Pro 上的基準測試顯示,部分網站的建置速度已提升超過兩倍,Astro 官方文件站的建置時間從 114.54 秒降至 73.53 秒。
基於 Rust 的 .astro 編譯器
.astro 元件編譯器已完全以 Rust 重寫,取代先前的 Go 實作。此變更帶來多項關鍵的標記處理差異:
- 移除 HTML 自動校正:編譯器不再默默將標記改寫為「有效的 HTML」,因此不會自動關閉標籤或重新排列元素。
- JSX 風格的嚴格性:未關閉的標籤與未結束的屬性現在會拋出錯誤,而非被自動修正。
- 空白字元處理:元素之間的空白會依照 JSX 規則折疊;若需保留空格,必須使用顯式表達式(例如
{' '})。
Sätteri:Rust 驅動的 Markdown 與 MDX
Astro 7 以 Sätteri 取代預設的 Markdown 與 MDX 流程,Sätteri 是一個以 Rust 為基礎的處理器。此舉消除了 JavaScript 為主的 unified 流程(remark/rehype)的額外負擔,該流程常是 Markdown 密集網站的主要瓶頸。Sätteri 內建支援先前必須透過外掛才能使用的功能,包括:
- GFM(表格、腳註、任務清單)
- 智慧標點與標題 ID
- 容器指令與數學公式
- Frontmatter(YAML、TOML)、上標/下標、以及 Wiki 連結
若專案仍需特定的 remark 或 rehype 外掛,可透過 @astrojs/markdown-remark 繼續使用基於 unified 的管線。
穩定的排隊渲染
排隊渲染現在已成為穩定且預設的引擎,對於表達式密集的頁面可提升約 2.4 倍的速度。不同於先前的遞迴渲染方式,新引擎使用佇列/堆疊與單一迴圈渲染節點,降低記憶體使用並提升執行效能。
Vite 8 與 Rolldown
Astro 7 升級至 Vite 8,隨之引入 Rust 為基礎的打包工具 Rolldown,取代 esbuild 與 Rollup。Rolldown 被報告比 Rollup 快 10‑30 倍,同時保持與 Rollup 及 Vite 外掛 API 的相容性。大多數 Astro 專案將在不需調整設定的情況下獲得更快的建置速度,因為相容層會自動將 esbuild 與 rollupOptions 設定轉換為 Rolldown 可用的格式。
進階路由與請求控制
Astro 7 引入 src/fetch.ts 入口點,讓開發者能完整掌控請求管線。這使得在請求到達 Astro 內部路由前,可實作自訂邏輯(例如驗證或 API 代理)。
此 API 與 Hono 相容,開發者可使用 Hono 中介軟體來組合請求管線。例如,現在可以確保驗證中介軟體先於 Astro Actions 執行,或僅在頁面渲染時套用計時中介軟體。
路由快取與 CDN 整合
路由快取已達到穩定狀態,提供跨平台的 API 以透過 Astro.cache 或設定檔中的宣告式 routeRules 來控制即時渲染的回應。
CDN 快取提供者
Astro 7 為 Netlify、Vercel 與 Cloudflare 引入實驗性的 CDN 提供者。這些提供者會直接將快取指令推送至主機的邊緣網路,讓快取命中時可在不觸發伺服器函式的情況下回應。設定方式為透過適配器的 /cache 入口點(例如 cacheNetlify()、cacheVercel() 或 cacheCloudflare())。
AI 輔助開發增強功能
Astro 7 為 AI 程式碼代理設計了多項功能,以提升其與開發伺服器的互動體驗。
背景開發伺服器
為避免 AI 代理在長時間執行的程序上卡住,Astro 7 新增 astro dev --background。此模式會將伺服器作為受管理的背景程序啟動,並提供鎖檔以防止重複執行實例。Astro 能自動偵測自身在 AI 代理內執行時,預設啟用此模式。代理可使用 astro dev stop、astro dev status、astro dev logs 來管理伺服器,並可透過 /_astro/status 端點檢查健康狀態。
結構化 JSON 日誌
JSON 日誌現在可透過 astro dev --json 或 logHandlers.json() 設定取得。此功能提供機器可讀的日誌,對於 AI 代理與生產環境的日誌聚合服務(如 Kibana、CloudWatch、Grafana/Loki)至關重要,取代先前以人類閱讀為主、格式化的輸出。