為什麼我要改用 Astro 重構部落格?

503 字

為什麼選擇 Astro?

其實最初代部落格是用 Hugo,但學習曲線偏高,很快就換回自己比較熟悉的 Next.js。只是用 Next.js 做一個以「內容為主」的部落格,確實有點大材小用。後來看到很多人都把部落格搬到 Astro,我稍微研究了一下,發現它非常符合我的需求,最後就決定搬家。主要原因有幾點:

  • 學習曲線低
  • 完美相容 React
  • 效能對比 Next.js 有大大的提升
  • 與 Markdown / MDX 深度綁定
  • 部署到 Vercel 一樣方便

效能提升

Astro 的核心理念是:

預設不送任何 JavaScript 到瀏覽器,只有明確標記為互動的元件(島嶼)才會 hydrate。

這讓我重新思考了什麼東西才需要用到 React:

  • 版面、頁面、靜態 UI.astro(零 JavaScript)
  • 主題切換、搜尋 → React(需要瀏覽器端互動)
  • 後台編輯器 → React(因為有大量狀態管理、即時預覽)

這是我覺得 Astro 最讚的地方,我將文章中的自訂元件(ex. Rating、Highlight)寫成 React 元件,這樣在後台編輯器裡可以即時渲染;但在前台頁面,因為我沒加 client:*,Astro build 時就會自動把它們轉成純靜態的 HTML 標籤!

在重構的過程中,我也移除了原本寫的一些不必要的腳本,讓部落格輕很多。現在前台的文章頁面幾乎沒有多餘的 JS 負擔,PageSpeed 分數也有了明顯提升。

Next.js 部落格行動版 PageSpeed 測試結果截圖(Performance 49 分、SEO 83 分)
Next.js 部落格行動版 PageSpeed 測試
Astro 部落格行動版 PageSpeed 測試結果截圖(Performance 99 分,SEO 得分 100 分)
Astro 部落格行動版 PageSpeed 測試

結論

框架沒有好壞,只有適不適合。

Next.js 是一個很棒的框架,如果需要大量的動態功能,它的 Server Actions、Route Handlers、ISR 都很有用;但一個以靜態內容為主的個人部落格,Astro 的「靜態優先、按需加入互動」更符合需求。