Astro 7.4.1:編譯器與 Markdown 管線改寫成 Rust,建置時間還附上一份帳單
摘要
Astro 7.4.1 把最慢的兩段搬進 Rust,再搭上 Vite 8,整體建置快上 15% 到 61%。建置指令另加一個計時參數,跑完會列出各階段、各類外掛與頁面渲染的耗時占比,連最慢頁面的中位數都給了。
推薦- 軟體名稱
- Astro
- 版本
- 7.4.1
- 收費
- 免費
- 開源
- 開源
- 作業系統
- WindowsmacOSLinux
- 更新時間
- 2026-10-21 15:57
Astro 第 7 條產品線把力氣放在建置流程上,而不是功能清單:先把最慢的兩段換成 Rust 寫的實作,再讓剩下的疑問由一份耗時明細來回答。
目前穩定版是 7.4.1
現行穩定版是 7.4.1,發布於 2026 年 10 月 19 日。這條線有兩個節點:第 7 條線在 2026 年 6 月 22 日開場,本次更新則在 10 月 15 日推出。專案以 MIT 授權開源,倉庫主要語言是 TypeScript。
最慢的兩段交給了 Rust
第 7 條線的第一次發布做了三件事,一句話講得完:把 astro 元件的編譯器整組換掉,從 Go 版重寫為 Rust 版;把 Markdown 與 MDX 的處理換成一條 Rust 管線;渲染引擎則改成以佇列為基礎的策略,讓等待渲染的片段排得更有效率。
官方的理由是建置分三段,第一段最吃時間:頁面、內容與前端元件先被打成一個 JavaScript 包,再按預先渲染的頁面逐個發請求、落成 HTML。慢的那部分正好是編譯與 Markdown 處理,於是這兩段被搬進原生程式碼。預設的 Markdown 處理器也跟著換了,從原本那組外掛換成自研管線。只寫標準 Markdown 的站幾乎沒感覺;掛了一串會改語法樹的外掛的專案,就得一項一項確認。
Vite 8 與它帶來的打包器
另一半提速來自 Vite 8。那一版最大的變化是內建一個用 Rust 寫的打包器,把原本分工的兩套工具併成一套,同時保留既有的外掛介面。合併之後官方給了一個區間:整體建置時間快 15% 到 61%,少數站甚至快上兩倍有餘。
基準表更能看出分布。六千多頁的文獻站從約 115 秒降到約 74 秒,一萬三千頁的從約 386 秒降到約 326 秒。頁數越多的站,百分比上的收益越小,因為頁面渲染本身沒被搬進 Rust,它占的比重反而升上來了。
收益大小取決於你的站有多少時間花在編譯與 Markdown 上,而幾千篇 Markdown 累積成的内容站,正好是編譯占大頭的那一類。

7.4.1 讓建置吐出一份帳單
第一次發布回答的是怎麼變快,這次回答的是快在哪、慢在哪。建置指令多了一個參數,跑完會印出明細:各階段、各類外掛、Markdown 處理與語法高亮、頁面渲染、圖片處理、整合,各項耗時與占比,還附上最慢頁面的中位數與高檔值。
官方用一個部落格起始範本示範。範本只有九個頁面,總耗時約兩秒半,其中頁面生成就占了兩秒多,約八成;最慢的頁面幾乎都是套用文章版型的那幾個,首頁與訂閱源都在毫秒級。問題指得很明確:版型裡留言區先取留言、每則留言再取作者資料,兩輪請求串在一起,每個頁面都在等。
改成一次性並行取回、再把結果往下傳之後,頁面生成從兩秒多降到約一秒,每篇文章的渲染時間減半。這個例子的價值不在那一秒,而在它展示了沒有報告時很難發現的東西——程式碼在編輯器裡看起來毫無問題。

圖片服務分成建置期與執行期
這次允許圖片服務配置兩套:預先渲染的頁面用一套,按需渲染的頁面用另一套。建置時有整台機器與完整執行環境,本機優化器最合適;按需渲染跑在伺服器或邊緣節點上,本機優化器未必跑得動,圖片 CDN 才是合理的選擇。先前只能二選一,或者交給轉接器替你決定。為了讓這件事成立,建置期用到的圖片改由框架自己的管線統一追蹤,各家轉接器不再各自複刻一套。
更嚴格的編譯器代表什麼
換編譯器不是單純的提速。新的 Rust 編譯器對不合法的 HTML 語法更嚴格:未閉合的標籤直接報錯,非空元素必須有配套的閉合標籤;語意上不合法的巢狀不再被自動修正,而是原樣交給瀏覽器。
舊編譯器會默默幫忙:自動閉合、調整順序、把放錯位置的節點搬出去。這些幫忙在某些情況下會造成難以追查的問題,所以新編譯器選擇不幫。代價是升級後可能看到以前沒見過的報錯,也可能發現渲染結果變了。實際做法很樸素:升級後先跑一遍建置,看到未閉合標籤就補齊,看到渲染變化就回頭查版型巢狀。版型規矩的專案幾乎無感,歷史包袱重的專案則是一次整理。
兩個實驗開關與幾條新約定
這次帶了兩個實驗性能力。一個是並行預先渲染,把靜態頁面的渲染分攤到多個 worker 執行緒,預設用掉除一個之外的全部核心;每個 worker 都會增加建置的記憶體占用,記憶體吃緊或沒變快時就該把 worker 數調低。另一個是自訂轉址頁:靜態站沒有伺服器可以發轉址標頭,每次轉址都得生成一張帶重新整理指令的小頁面,先前它的文字、樣式與延遲都是固定的,新開關允許用自己的版型渲染,把來源、目標、狀態碼與延遲當參數傳進來。
幾條新約定也值得記一筆:最低 Node 版本抬到 22;src/fetch.ts 成為保留檔名,進階路由會把它當設定自動引入,已有同名檔案的專案需要改設定或改名;字型提供方新增一個可選回呼,用來宣告字族實際具備的字重、字形、子集與格式,設定裡寫了提供方給不出的值會提前收到警告——現在是可選,下一個大版本會變成必需。
適合哪些人
官網把自己定位成「面向內容驅動型網站的 Web 框架」,點名的站型是行銷站、部落格、電商站。核心設計是伺服器優先:元件在伺服器端渲染,只把 HTML 送到瀏覽器,多餘的 JavaScript 開銷為零,需要互動的部分再用島嶼的方式單獨載入。可擴充性上支援接入各類主流 UI 框架的元件,既有元件可以直接搬進來;內容側提供內容集合,寫進目錄的 Markdown 與資料檔案會自動取得型別安全與補全。
把它放進工具箱的理由通常不是某一項功能,而是建置時間與產物體積同時可控。第 7 條線把前者壓下來,這次讓前者變得可解釋。
Astro 7 講的故事很樸素:把慢的部分換成更快的語言實作,再把剩下說不清的部分做成一份能讀的報告。前者靠一次重寫完成,後者靠一個參數就夠。值得記住的不是那些百分比,而是「建置變慢時先看報告,再決定改哪裡」這個順序。