你的浏览器无法正常显示内容,请更换或升级浏览器!

Nuxt 3 服务端渲染优化与常见坑备忘

tenfei
tenfei
发布于2026-08-31 18:39 阅读5次
Nuxt 3 服务端渲染优化与常见坑备忘
用备忘清单形式记录 Nuxt 3 服务端渲染的优化技巧和常见坑,涵盖 SSR/SSG 选择、数据获取、组件缓存、SEO 配置、部署注意事项等,附代码片段和踩坑记录,帮助避坑提效。
# Nuxt 3 服务端渲染优化与常见坑备忘 > 这是一份 Nuxt 3 服务端渲染(SSR)的实战备忘,记录高频优化手段和踩过的坑,随用随查。 ## ⚡ 渲染模式怎么选 - **SSR**:服务端渲染,SEO 友好,适合内容型站点 - **SSG**:构建时生成静态页,适合内容不常变的站点 - **SPA**:纯客户端,适合后台管理系统 ```js // nuxt.config.ts 全局设置 export default defineNuxtConfig({ ssr: true, routeRules: { "/about": { static: true }, // 该页 SSG "/admin/**": { ssr: false }, // 该路径 SPA "/api/**": { cors: true } } }) ``` > 按路由精细控制,比全局一刀切更灵活。 ## 📦 数据获取的三种方式 ```js // useFetch:服务端自动去重,推荐 const { data, pending, error } = await useFetch("/api/posts") // useAsyncData:更底层的控制 const { data } = await useAsyncData("key", () => $fetch("/api/data")) // $fetch:手动控制 const data = await $fetch("/api/data") ``` > useFetch 在 SSR 下会自动把数据序列化到客户端,避免重复请求。 ## 🚀 性能优化清单 ### 1. 组件懒加载 ```js // 动态组件,按需加载 const HeavyComp = defineAsyncComponent(() => import("~/components/HeavyChart.vue") ) ``` ### 2. 图片懒加载 ```html <NuxtImg src="/banner.jpg" loading="lazy" /> ``` ### 3. 减少 hydration 开销 ```html <!-- 纯静态内容跳过 hydration --> <div v-html="content" /> ``` ### 4. 缓存 API 响应 ```js routeRules: { "/api/posts": { swr: 300 } // 缓存 5 分钟 } ``` ## 🐛 常见坑备忘 > ⚠️ **坑1:window/document 在服务端未定义** 浏览器 API 只能在客户端用,包一层判断: ```js if (import.meta.client) { // 浏览器专属代码 localStorage.getItem("token") } ``` > ⚠️ **坑2:SSR 与客户端状态不一致导致 hydration 报错** 服务端渲染和客户端渲染结果要一致,随机数、时间戳要用固定种子。 > ⚠️ **坑3:环境变量泄露到客户端** ```js // 只有 NUXT_PUBLIC_ 前缀才会暴露到客户端 const secret = process.env.DB_PASSWORD // 仅服务端 const publicKey = useRuntimeConfig().public.apiBase // 客户端可见 ``` > ⚠️ **坑4:内存泄漏(服务端)** SSR 下模块级变量会在请求间共享,不要存请求级数据到模块作用域。 ## 📌 SEO 关键配置 ```js useSeoMeta({ title: "文章标题", description: "文章描述", ogImage: "/cover.jpg", }) // 动态路由的 SEO useHead({ title: () => `文章 - ${route.params.id}` }) ``` ## 🎯 部署注意 - SSR 需要 Node 运行时(不能纯静态托管) - 用 PM2 或 Docker 守护进程 - 设置合理的超时和内存限制 ```bash npm run build && node .output/server/index.mjs ``` 这份备忘持续补充,遇到新坑就记下来。

2

0

文章点评
Copyright © from 2021 by namoer.com
458815@qq.com QQ:458815
蜀ICP备2022020274号-2