文章目錄

最近修改部落格文章時,每次等 Cloudflare Pages 部署都要好幾分鐘。我讓 Agent 檢查圖片能不能優化,或是有沒有快取可以用。結果開啟建置快取後,建置時間就從約 229 秒縮短到 81 秒。
本站剛完成從 Hugo 重寫成 Astro,透過 Git 推送讓 Pages 自動建置。檢查後發現,每次建置都在重新轉換同一批圖片,連只改文字也一樣。
啟用建置快取
Cloudflare Pages 的設定位置在「Workers & Pages」。選擇網站的 Pages 專案後,依序開啟「Settings → Build → Build cache」,再按下「Enable」。
依照 Cloudflare 的建置快取文件,這項功能需要 v2 或更新的建置系統。本站使用 v3,開啟後保留原本的 npm run build 和輸出目錄 dist,就能正常使用。
Astro 會將處理過的圖片保存在 node_modules/.astro,Pages 也支援快取這個目錄。沿用 Astro 預設設定的專案不需要另外修改,已有自訂 cacheDir 時則要先核對位置。目錄設定可參考 Astro 的圖片快取說明。
確認快取生效
開啟後照平常方式推送 Git,讓 Pages 完成一次建置並保存快取。第一次還是會花時間處理圖片,建置紀錄最後應該會出現:
1Success: Build output uploaded to build cache.
下次修改文章並推送 Git 後,再打開新一次的建置紀錄,確認出現還原成功的訊息:
1Success: Build output restored from build cache.
Astro 的圖片紀錄也會顯示 reused cache entry,表示這次沿用了已經處理好的圖片。兩次都確認過,才知道快取有存下來並在下次用到。
建置命令裡也要避免額外執行 npm ci。依照 npm ci 文件,它會先清除 node_modules,放在快取還原後執行就會連 Astro 快取一起刪掉。本站由 Pages 處理依賴安裝,建置命令維持原樣。
建置速度實測
本站的 110 張原圖會轉成不同尺寸與格式,總共產生 1,440 個圖片版本。原本光是這一步就花了約 141 秒,快取命中後只剩不到一秒。
以下是 2026 年 9 月 16 日使用 Astro 7.3.2 的實測。三次使用相同提交,時間只計算建置階段,不含排隊、複製程式碼與部署:
| 狀態 | 建置時間 | 圖片處理時間 |
|---|---|---|
| 啟用前 | 229.48 秒 | 140.85 秒 |
| 啟用後第一次,建立快取 | 211.71 秒 | 137.02 秒 |
| 再次建置,還原快取 | 80.73 秒 | 0.46 秒 |
這次建置縮短了約 65%,1,440 個圖片版本全部命中快取。原圖、圖片品質與原本的檢查流程都保留,Agent 也比對過頁面並抽查圖片,輸出結果一致。
這個差距和本站的圖片處理量有關,圖片較少的網站不一定能省下這麼多時間。新增圖片或修改轉換設定時也需要重新處理,快取閒置七天後則可能被清除,下次建置就得重新建立。
總結
Astro 專案可以先到 Cloudflare Pages 開啟「Build cache」,完成一次建置後再確認下一次有沒有還原成功。本站因此省下兩分多鐘的建置時間,也就暫時不需要批次壓縮全站原圖。