Nuxt项目首屏加载太慢,该怎么优化?
我用 Nuxt 3 搭了个博客,部署后发现首屏白屏时间特别长,Lighthouse 跑出来 TTI 都快 5 秒了。页面其实没多少内容,就是首页拉个文章列表。
试过开 experimental.renderJsonPayloads,也用了 defineAsyncComponent 拆分组件,但效果不明显。是不是哪里配置错了?或者还有哪些关键的优化点没考虑到?
这是我的 nuxt.config.ts 里关于性能的部分:
export default defineNuxtConfig({
experimental: {
renderJsonPayloads: true,
asyncContext: true
},
vite: {
build: {
sourcemap: false
}
}
})
先说几个容易被忽略的点。
第一,检查你的依赖包体积。很多时候首屏慢是因为不小心引入了巨大的第三方库。在
nuxt.config.ts里加上 build analyzer 看看到底打包了什么:然后跑一下
npx nuxi analyze看看哪个包最大,我之前就遇到过不小心把 moment.js 全量引入的情况,一个库就 300KB。第二,
routeRules缓存必须配置。这是官方文档明确推荐的,你现在的配置里完全没有缓存策略:SWR(Stale-While-Revalidate)对博客这种内容不频繁更新的场景非常合适,首屏渲染会直接返回缓存,速度能提升一个数量级。
第三,图片和字体。如果文章列表有缩略图,确保用了
@nuxt/image模块做优化,不要直接用原始<img>标签。字体用@nuxtjs/google-fonts或者本地 woff2,避免阻塞渲染。第四,确认你的部署模式。如果是 SSR 动态渲染,每次请求都要服务端跑一遍,肯定会慢。博客这种静态内容多的项目,建议用
nuxi generate做预渲染,或者配置混合渲染:最后补充一点,
defineAsyncComponent对首屏优化帮助有限,因为它主要是延迟加载,服务端渲染时还是会执行。真正有效的是减少首屏需要的组件和数据量,把非关键内容用<ClientOnly>包起来,比如评论区、分享按钮这些。建议先跑 analyzer 定位问题,大概率是某个大依赖或者缓存没配好。