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

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

Choyeon
Choyeon
2026年8月19日 1 分钟阅读 551 阅读
288 字 354 字符 更新于 2026年11月8日
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 分钟阅读