提示:本网站现在为维护调试状态

Nuxt 3 進階 - SSR 與 SSG 深度解析

Choyeon
Choyeon
2026年8月19日 1 分鐘閱讀 554 閱讀
288 字 354 字元 更新於 2026年11月8日
Nuxt 3 進階 - SSR 與 SSG 深度解析
目錄

Nuxt 3 进阶 - SSR 与 SSG 深度解析

Nuxt 3 代表了 Vue 生态中全栈框架的最高水准。其全新的 Nitro 引擎统一了服务端和构建时的渲染逻辑,让 SSR、SSG、ISR 的切换变得前所未有地简单。

三种渲染模式的本质差异

理解 Nitro 的工作机制,首先需要明确三种渲染模式在请求生命周期上的不同:

<script setup lang="ts">
import { useAsyncData, useFetch, definePageMeta } from '#app'

definePageMeta({
  name: 'products-id',
  path: '/products/:id',
  middleware: ['auth'],
  layout: 'shop'
})

const route = useRoute()
const { data: product, pending, refresh, error } = await useAsyncData(
  `product-${route.params.id}`,
  () => $fetch(`/api/products/${route.params.id}`),
  {
    server: true,
    lazy: false,
    default: () => ({}),
    transform: (res) => ({
      ...res,
      formattedPrice: new Intl.NumberFormat('zh-CN', {
        style: 'currency',
        currency: 'CNY'
      }).format(res.price)
    })
  }
)

const { data: related } = await useFetch(
  '/api/products/related',
  {
    params: { id: route.params.id, limit: 4 },
    pick: ['items']
  }
)

useHead({
  title: () => product.value?.name,
  meta: [
    { name: 'description', content: () => product.value?.description }
  ]
})

const isrTimestamp = ref(Date.now())
</script>

<template>
  <div class="product-page">
    <Suspense>
      <template #default>
        <ProductDetail v-if="product" :product="product" />
        <div v-else-if="error" class="error">{{ error.message }}</div>
      </template>
      <template #fallback>
        <ProductSkeleton />
      </template>
    </Suspense>
    <RelatedProducts v-if="related" :items="related.items" />
  </div>
</template>

性能与成本对比

渲染模式 首屏 TTFB 可交互时间 TTI 服务器成本 SEO 友好 适用场景
SSR ⚡ 300-600ms ✅ 优秀 💸 高 ✅ 最佳 个性化、实时数据
SSG ⚡⚡⚡ <50ms ✅ 最佳 🆓 极低 ✅ 最佳 文档、博客、产品页
ISR ⚡⚡ <100ms* ✅ 优秀 💰 中 ✅ 良好 电商、新闻、中低频更新
CSR (SPA) 🐢 200ms + JS ❌ 较差 🆓 极低 ⚠️ 需额外处理 Dashboard、后台管理

*首次访问后命中缓存的情况

缓存策略配置

Nitro 提供了多层缓存机制。对于 SSR 页面,可以通过 routeRules 配置 CDN 级缓存:

// nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    '/products/**': { swr: 3600 },
    '/api/**': { swr: 60, cache: { maxItems: 1000 } },
    '/static/**': { static: true }
  }
})

SWR(Stale-While-Revalidate)模式让用户在后台刷新数据的同时立即返回缓存响应,兼顾了性能和数据新鲜度。

水合优化技巧

SSR 模式下,客户端需要对服务端渲染的 HTML 进行水合(Hydration)。常见的性能陷阱包括:

  1. Payload 过大:使用 definePageMeta 的 payloadExtractor 精简传递给客户端的数据
  2. 过早水合:使用 <ClientOnly> 包裹非首屏必须的交互组件
  3. 重复请求:合理设置 useAsyncData 的 key,利用 Nitro 自动的数据去重

最佳实践

  1. 默认用 SSG,除非页面强依赖实时或个性化数据
  2. 组合渲染模式:首页 SSG + 详情页 ISR + 用户中心 SSR,而不是一刀切
  3. 善用 Nitro API Routes,避免单独部署后端服务(对于中小项目)
  4. 监控 TTFB 分布,如果 P95 > 1s,考虑开启缓存或切换 ISR
  5. 使用 nuxt build --prerender 预渲染高频页面,降低冷启动耗时

总结

Nuxt 3 的 Nitro 引擎彻底抹平了 SSR 与 SSG 的开发差异。开发者只需关注业务逻辑,通过配置文件即可在不同渲染模式间切换。选择渲染模式的关键在于:页面更新频率 × 内容个性化程度 × 团队运维能力。

X微博Telegram

本文作者

投票

你最希望 Rosetta 优先加入哪项功能?

社区投票(演示数据,可后台删除)

留言 (5)

0 / 3000
dryrun-test
dryrun-test15 天前

dry-run 联调测试评论:验证邮件链路只记日志不投递。

DevOps小能手
DevOps小能手devops-lab.cn2026年9月3日

受益匪浅,感谢大佬分享!

咖啡与代码
咖啡与代码2026年9月3日

补充一点:实际使用中如果遇到 MySQL 的 8 小时超时问题,可以在连接串里加 autoReconnect=true 参数,虽然官方不推荐但挺好用的。

考研加油鸭
考研加油鸭kaoyan-journey.xyz2026年9月3日

有个小问题:你文中用的是 @Async 注解,这个默认用的是 SimpleAsyncTaskExecutor,生产环境是不是最好手动配一个线程池?

像素小贩
像素小贩pixelart.studio2026年9月2日

楼主,我按照你的步骤操作后启动报错:Error creating bean with name 'dataSource',版本是 Spring Boot 3.2,请问有遇到过吗?

相關文章

快速上手 FastAPI - 構建高性能 REST API

快速上手 FastAPI - 構建高性能 REST API

FastAPI 是現代 Python Web 框架中的佼佼者,基於類型提示自動生成文檔、支持異步操作、性能媲美 Node.js。本文將通過實戰項目帶你從零構建一個完整的 CRUD API,涵蓋路由定義、請求驗證、依賴注入、數據庫集成等核心特性,讓你在 30 分鐘內掌握 FastAPI 的精髓。

這篇文章需要存取密碼 4 分鐘閱讀
Python 併發:asyncio vs ThreadPool vs ProcessPool

Python 併發:asyncio vs ThreadPool vs ProcessPool

深度對比 Python 三大併發模型:GIL 限制下的線程池(IO 密集)、進程池(繞 GIL 適合 CPU 密集)、asyncio 協程(超高併發 IO)。從原理/性能/複雜度四維度給出選型決策樹。

1 分鐘閱讀
Alembic 深度指南:數據庫遷移 + 自動生成 + 分支合併

Alembic 深度指南:數據庫遷移 + 自動生成 + 分支合併

SQLAlchemy 官方遷移工具 Alembic 完全指南:從 env.py 配置、autogenerate 自動檢測模型變更(字段、索引、約束)、批處理腳本、downgrade 回滾策略,到多人併發開發時 migration 分支衝突、head 分叉合併的標準操作流程,附生產部署檢查表。

1 分鐘閱讀
RAG 檢索增強生成實戰:Embedding + Vector DB + ReRank

RAG 檢索增強生成實戰:Embedding + Vector DB + ReRank

從零搭建生產級 RAG 系統:文檔分塊策略(Chunk Size/重疊窗口)、Embedding 模型選型與向量化、向量數據庫(PGVector/Milvus)檢索過濾、Reranker 重排精修 Top-K,加上引用溯源和 Prompt 壓縮優化,附完整可運行代碼。

1 分鐘閱讀
算法與數據結構:動態規劃 5 大解題模板

算法與數據結構:動態規劃 5 大解題模板

徹底掌握動態規劃:先給出通用 DP 解題五步法,再精解五大高頻模板:背包類、子序列類、區間DP、狀態壓縮DP、樹形DP,每個模板附典型代碼與變形要點。

1 分鐘閱讀
Vue 3 組合式 API 實戰

Vue 3 組合式 API 實戰

Vue 3 的組合式 API (Composition API) 徹底改變了 Vue 組件的組織方式。本文通過構建一個複雜的電商篩選器組件,演示 ref/reactive 的選擇、computed/watch 的合理使用、自定義組合函數 (Composable) 的抽離原則、生命週期鉤子的時機以及 provide/inject 進行跨層級狀態傳遞的正確姿勢。

1 分鐘閱讀