24
Re:Nuxt 100 天練習曲
Day 24

預先烤好的蛋糕 (Prerendering)

Day 24·靜態生成·效能優化

我們在 Day 22 學到,Nuxt 預設會在使用者來訪時,「即時」在伺服器上渲染頁面 (SSR)。但有些頁面內容很少變動,例如「關於我們」或部落格文章。如果每次有人來都要重新「現做」一次,似乎有點浪費。

今天,我們來學習一種更高效能的方式:預先渲染 (Prerendering)

1. 什麼是預先渲染?

讓我們用一個麵包店的比喻來理解:

即時渲染 (SSR)

像是現做的蛋糕。客人點餐後,廚師才開始從麵粉開始製作。蛋糕很新鮮,但客人需要花時間等待。

預先渲染 (Prerendering)

像是架上的麵包。麵包師傅在開店前,就先把今天所有要賣的麵包都預先烤好放在架上。客人一來,直接拿了就走。速度極快

核心概念:Prerendering 就是在建置階段 (build time),就把您的頁面都產生好,變成一個個真實的 HTML 檔案。當使用者訪問時,伺服器直接把這個現成的檔案傳給他,完全不需要即時運算。

2. Nuxt 如何預先渲染?

1

第一步:執行 generate 指令

我們要執行一個特別的指令,而不是 nuxt build

執行預先渲染指令
npx nuxt generate
2

第二步:讓「爬蟲」開始工作

執行後,Nuxt 會啟動一個「網路爬蟲 (Crawler)」。

這個爬蟲會從您的首頁 (/) 開始,找出頁面上所有的連結 (<NuxtLink>),然後一個個去訪問,再從那些頁面找出更多連結... 直到把所有能從首頁連到的頁面都「逛」過一遍為止。

每逛到一個頁面,它就會拍下一張「快照」(產生 HTML 檔案),存到 .output/public 這個資料夾。這個資料夾就是您最終「烤好」的整個靜態網站,可以直接部署到任何靜態主機上。

3. 如果爬蟲找不到怎麼辦?

這個爬蟲很聰明,但如果有些頁面沒有被任何地方連結到(例如一個隱藏的活動頁,或是一個 sitemap.xml),爬蟲就找不到它。

這時,我們可以在 nuxt.config.ts 中,透過 routeRules 手動給它一張「必烤清單」。

nuxt.config.ts
// nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    // 告訴 Nuxt,/blog/ 下的所有頁面都應該被預先渲染
    '/blog/**': { prerender: true },

    // 這個管理後台頁面不用預先渲染,保持即時渲染 (SSR)
    '/admin/**': { prerender: false },

    // 這個 RSS 檔案也要預先產生
    '/rss.xml': { prerender: true },
  }
})

精準控制:這樣您就能精準控制哪些頁面要預先烤好,哪些要保持現做。

實際應用場景

適合預先渲染

  • 部落格文章
  • 產品介紹頁面
  • 公司資訊頁面
  • 說明文件
  • 行銷頁面

不適合預先渲染

  • 會員儀表板
  • 購物車頁面
  • 即時聊天功能
  • 個人化內容
  • 管理後台

今日總結

今天我們學會了 Prerendering,一個能大幅提升網站效能的技巧。透過 npx nuxt generate,我們可以像烤麵包一樣,預先把頁面都準備好。

極致效能:預先渲染提供最快的載入速度

在建置時就產生好 HTML 檔案,使用者訪問時直接傳送

智慧爬蟲:自動掃描所有可連結的頁面

從首頁開始遞歸掃描所有連結,自動產生靜態頁面

精準控制:透過 routeRules 客製化渲染策略

手動指定哪些頁面需要預先渲染,哪些保持動態

對於內容不常變動的頁面(部落格、文件、行銷頁面),預先渲染是絕佳的選擇。這也是實現我們 Day 22 提到的「混合渲染」的核心技術之一,讓您的網站兼具效能與彈性。