網頁HTML渲染方式

Tuesday, Mar 17, 2026 | 5 minute read | Updated at Tuesday, Mar 17, 2026

@
網頁HTML渲染方式

CSR / SSR / SSG / ISR 渲染方式的差異

核心概念

簡而言之,最根本的差異是 「網頁的 HTML 是在哪裡/何時產生的?」

  • CSR — 地點特殊:唯一在瀏覽器產生的
  • SSR vs SSG vs ISR — 地點相同(都在 Server),但時機不同
方法 在哪裡產生 什麼時候產生
CSR 瀏覽器 使用者造訪時
SSR Server 每次收到請求時
SSG Server Build 的時候(提前)
ISR Server Build 時 + 定時重新產生

名詞解釋

ISR

Incremental Static Regeneration 增量靜態再生

Client Side Render

客戶端渲染,HTML 由瀏覽器(使用者的電腦)負責產生

運作流程:

使用者輸入網址 ↓ Server 回傳一個「幾乎空白」的 HTML + 一包 JavaScript ↓ 瀏覽器下載並執行 JavaScript ↓ JavaScript 向 API 請求資料 ↓ 拿到資料後,JavaScript 在瀏覽器中動態產生畫面 ↓ 使用者看到內容

時間軸特徵

首次載入慢:要等 JS 下載 → 執行 → 請求資料 → 渲染,才能看到內容 後續切換快:頁面切換不需要再向 Server 要 HTML,只需要拿資料 白畫面期:在 JS 執行完之前,使用者看到空白或 loading 畫面

代表框架

React(純 CSR)、Vue(純 CSR)

Server Side Render

伺服器端渲染,HTML 由伺服器負責產生,完整送給瀏覽器

運作流程

使用者輸入網址 ↓ Server 收到請求,向資料庫/API 取得資料 ↓ Server 將資料填入 HTML 模板,產生完整 HTML ↓ 將完整 HTML 回傳給瀏覽器 ↓ 使用者立即看到內容(瀏覽器幾乎不需要額外處理)

時間軸特徵

首次載入快:HTML 已經包含完整內容,瀏覽器直接顯示 每次切換都要請求 Server:每個頁面都重新向伺服器要一份新的 HTML TTFB(Time to First Byte)較長:Server 要先處理完才能回傳

代表框架

Next.js、Nuxt.js、傳統 PHP / Ruby on Rails

Static Site Generation

靜態生成,HTML 在「build 的時候」就產生好了,不是 request 的時候

運作流程

開發者執行 build 指令 ↓ 框架一次性產生所有頁面的 HTML 檔案 ↓ 這些 HTML 靜態檔案部署到 CDN ↓ 使用者請求 → CDN 直接回傳現成的 HTML

時間軸特徵

載入極快:HTML 已經預先產生好,CDN 直接回傳,不需要 Server 即時運算 內容是「build 時的快照」:如果資料更新了,需要重新 build 才能反映 適合內容不常變動的網站:部落格、文件網站、行銷頁面

代表框架

Hugo、Gatsby、Next.js(靜態匯出)、Nuxt.js(靜態模式)

Incremental Static Regeneration

增量靜態再生,SSG 的進化版,靜態頁面可以「定時自動更新」,不用重新 build 整個網站

運作流程

第一位使用者請求頁面 ↓ 回傳已經 build 好的靜態 HTML(立即回應) ↓ 同時在背景,Server 偷偷重新產生新版 HTML ↓ 第二位使用者請求同一頁面 ↓ 如果新版 HTML 已經好了 → 回傳新版 如果還沒好 → 仍回傳舊版(不會讓使用者等)

時間軸圖解

時間 0s → 使用者 A 拿到靜態 HTML(舊的,但極快) 時間 0s → 背景開始重新生成新 HTML 時間 2s → 新 HTML 生成完成,存起來 時間 10s → 使用者 B 來了,拿到新 HTML

代表框架

Next.js(唯一原生支援 ISR 的框架)


四種渲染方式 — 時間流程比較

時間 CSR SSR SSG ISR
Build 階段 (無) (無) 產生所有頁面 HTML 產生所有頁面 HTML
① 使用者請求 發出請求 發出請求 發出請求 發出請求
② Server 處理 回傳空白 HTML + JS 檔案 查資料庫 / API 取資料 CDN 直接回傳現成 HTML CDN 直接回傳現成 HTML
③ Server 組裝 (無) 將資料填入模板,組合完整 HTML (無) (無)
④ 回傳給瀏覽器 空白 HTML + 一包 JS 完整 HTML 完整 HTML 完整 HTML
⑤ 瀏覽器處理 下載並執行 JS 直接顯示 直接顯示 直接顯示
⑥ 畫面狀態 白畫面 / Loading 看到內容 看到內容 看到內容
⑦ 請求資料 JS 向 API 發請求 (已完成) (已完成) (已完成)
⑧ 等待回傳 等 API 回傳資料 (已完成) (已完成) 背景偷偷重新產生新版 HTML
⑨ 渲染畫面 JS 動態產生畫面 (已完成) (已完成) (已完成)
⑩ 畫面狀態 看到內容 (已完成) (已完成) 下次請求拿到新版 ✅

重點:看 ✅ 出現在第幾步

  • SSG / ISR → 第 ⑥ 步就看到(最快)
  • SSR → 第 ⑥ 步看到(但 ②③ 要等 Server 處理,所以比 SSG 慢一點)
  • CSR → 第 ⑩ 步才看到(最慢,中間都在等 JS 和 API)

四種渲染方式比較

比較項目 CSR SSR SSG ISR
HTML 產生位置 瀏覽器 Server Server(Build 時) Server(Build 時 + 背景更新)
首次載入速度 慢(要等 JS 執行) 中等(等 Server 處理) 極快(CDN 直接回傳) 極快(CDN 直接回傳)
SEO 差(搜尋引擎看到空白 HTML) 好(完整 HTML) 好(完整 HTML) 好(完整 HTML)
內容即時性 高(每次都拿最新資料) 高(每次都即時產生) 低(build 時的快照) 中(定時更新)
Server 負擔 低(Server 只給靜態檔案) 高(每次請求都要運算) 極低(只有 CDN) 低(只在背景偶爾運算)
適用場景 後台管理系統、互動性高的 SPA 需要 SEO + 即時資料的頁面 部落格、文件、行銷頁面 電商商品頁、新聞網站
代表框架 React、Vue Next.js、Nuxt.js、PHP Hugo、Gatsby、Next.js Next.js

面試常見問題

Q1:CSR 和 SSR 最大的差異是什麼?

HTML 產生的「地點」不同。CSR 是在瀏覽器(Client)用 JavaScript 產生 HTML;SSR 是在伺服器(Server)產生完整 HTML 後才回傳給瀏覽器。

Q2:為什麼 CSR 對 SEO 不友善?

因為搜尋引擎爬蟲拿到的是一個幾乎空白的 HTML(只有 <div id="root"></div>),實際內容要等 JavaScript 執行完才會出現。雖然 Google 爬蟲已經可以執行 JS,但不保證每次都會等,其他搜尋引擎支援更差。

Q3:SSG 和 SSR 都在 Server 產生 HTML,差在哪?

差在「時機」。

  • SSG 是在 build 階段就把所有頁面產生好,之後每次請求都回傳同一份靜態檔案;
  • SSR 是每次收到請求時才即時產生 HTML,所以內容永遠是最新的,但 Server 負擔較大。

Q4:什麼情況下會選擇 ISR?

當網站內容需要更新,但不需要「每次請求都是最新的」。例如電商的商品頁,價格可能一天更新幾次,用 ISR 設定每 60 秒重新生成一次,既有 SSG 的速度,又能定期更新內容。

Q5:Next.js 為什麼同時支援 CSR、SSR、SSG、ISR?

Next.js 讓你在同一個專案裡,針對不同頁面選擇不同的渲染方式。例如首頁用 SSG(不常變動)、商品頁用 ISR(定期更新)、購物車用 CSR(純互動)、搜尋結果用 SSR(每次都不同)。這種彈性是 Next.js 的最大優勢。

Q6:你的部落格用的是哪種渲染方式?為什麼?

Hugo 是 SSG。因為部落格文章寫完後不常變動,不需要即時資料,用 SSG 產生靜態 HTML 部署到 CDN,載入速度最快、Server 成本最低。

© 2024 - 2026 Joanna's Blog

🌟 A Hugo theme named Dream

About Me

Hello I’m Joanna, this is my blog

我會在這邊分享我學習程式語言的心得與筆記