【名詞解釋】SSR、ISR、API Routes

這三個名詞(SSR、ISR、API Routes)是 Next.js 的核心特性,常常讓人混淆。下面逐一拆解,說明它們的概念、運作方式、優缺點與應用場景。


1️⃣ SSR(Server-Side Rendering)

Server-Side Rendering = 伺服端渲染

程式碼範例

// pages/index.tsx
export async function getServerSideProps() {
  const data = await fetch('https://api.example.com/data').then(res => res.json())
  return { props: { data } }
}

export default function Home({ data }) {
  return <div>最新數據:{data.value}</div>
}

優點

缺點

適用場景


2️⃣ ISR(Incremental Static Regeneration)

ISR = 增量式靜態再生

程式碼範例

// pages/blog/[id].tsx
export async function getStaticProps() {
  const post = await fetch('https://api.example.com/post/1').then(res => res.json())
  return {
    props: { post },
    revalidate: 60, // 每 60 秒重新生成一次
  }
}

優點

缺點

適用場景


3️⃣ API Routes

API Routes = 內建後端 API

程式碼範例

// pages/api/hello.ts
export default function handler(req, res) {
  res.status(200).json({ message: 'Hello API!' })
}

或(App Router 格式):

// app/api/hello/route.ts
export async function GET() {
  return Response.json({ message: 'Hello API!' })
}

優點

缺點

適用場景


4️⃣ 對比表

特性 SSR ISR API Routes
用途 動態頁面渲染 靜態頁面快取 + 定時更新 提供後端 API
執行時機 每次請求 首次請求生成,之後快取,背景再生 請求時執行(類似 REST endpoint)
效能 中等(依賴伺服器) 快(靜態快取) 視邏輯而定
SEO 不適用(API)
適合場景 即時內容、個人化頁面 部落格、商品頁、新聞 驗證、表單提交、聚合 API

總結


🔎 Next.js 三種模式請求流程圖

[ 使用者請求瀏覽器 URL ]
            │
            ▼
 ┌───────────────────────┐
 │   Next.js Router 判斷 │
 └───────────────────────┘
        │        │
        │        ├──────────────► [ /api/... 路徑 ]
        │        │                       │
        │        │                       ▼
        │        │               API Routes Handler
        │        │               (Node 端執行,回傳 JSON)
        │        │
        ▼
 [ 頁面 Route ]
        │
        ├─────────► **SSR**
        │           - 每次請求 → Node 端執行 React
        │           - 即時撈資料 → 回傳完整 HTML
        │
        ├─────────► **ISR**
        │           - 首次請求 → 生成靜態 HTML 並快取
        │           - 之後 → 直接回傳快取
        │           - 過期 (revalidate 秒數到) → 背景再生 HTML
        │
        └─────────► **SSG (純靜態)**
                    - build 時生成 HTML
                    - 所有請求都回傳同一份 HTML

📌 圖示解讀


🎯 使用建議


 


修訂版本 #2
由 treeman 建立於 17 E 2025 10:39:11
由 treeman 更新於 17 E 2025 10:41:15