Nuxt 4 Performance Optimization: A Complete Guide for 2025
Master performance optimization in Nuxt 4 applications. Learn advanced techniques, best practices, and tools to achieve lightning-fast load times and superior user experience.
Nuxt 4 Performance Optimization: A Complete Guide for 2025
In modern web development, application speed and performance play a critical role in user experience and business success. Users expect instant responses, and search engines heavily consider performance metrics in their rankings.
Why Performance Matters
According to recent studies:
- 53% of users abandon a site if it takes longer than 3 seconds to load
- Every second of delay can reduce conversions by 7%
- Fast sites rank higher in search results
- Mobile users are even more impatient - expecting sub-2-second load times
Core Web Vitals: The Performance Pillars
1. LCP (Largest Contentful Paint)
Target: < 2.5 seconds
LCP measures how quickly the largest content element becomes visible. In Nuxt 4, optimize LCP by:
- Using
<NuxtImg>with properloadingandfetchpriorityattributes - Implementing critical CSS inlining
- Preloading hero images and fonts
- Leveraging SSR for instant first paint
<NuxtImg
src="/hero.jpg"
fetchpriority="high"
loading="eager"
:width="1920"
:height="1080"
/>
2. INP (Interaction to Next Paint)
Target: < 200ms
INP replaced FID and measures responsiveness. Optimize in Nuxt 4:
- Use
useDebounceFnanduseThrottleFnfrom VueUse - Implement
requestIdleCallbackfor non-critical tasks - Split heavy computations with
computedand proper memoization - Avoid blocking the main thread with web workers
const processData = useDebounceFn((data) => {
// Heavy processing
}, 300)
3. CLS (Cumulative Layout Shift)
Target: < 0.1
Prevent layout shifts:
- Always specify image dimensions
- Reserve space for dynamic content
- Use
aspect-ratioCSS property - Avoid inserting content above existing content
Rendering Strategies in Nuxt 4
Nuxt 4 introduces enhanced rendering options:
1. Universal Rendering (SSR)
Best for: SEO-critical pages, blogs, e-commerce
export default defineNuxtConfig({
ssr: true,
routeRules: {
'/blog/**': { swr: 3600 } // Cache for 1 hour
}
})
2. Static Site Generation (SSG)
Best for: Marketing sites, documentation
nuxt generate
3. Client-Side Rendering (CSR)
Best for: Dashboards, admin panels
export default defineNuxtConfig({
ssr: false
})
4. Hybrid Rendering (NEW in Nuxt 4)
Mix rendering strategies per route:
export default defineNuxtConfig({
routeRules: {
'/': { prerender: true }, // SSG
'/api/**': { ssr: false }, // CSR
'/products/**': { swr: true }, // SSR with cache
'/admin/**': { ssr: false } // SPA
}
})
Advanced Performance Techniques
1. Code Splitting & Lazy Loading
Auto-import components:
<script setup>
// Heavy component loaded only when needed
const HeavyChart = defineAsyncComponent(() =>
import('~/components/HeavyChart.vue')
)
</script>
Lazy load routes:
export default defineNuxtConfig({
experimental: {
componentIslands: true // Island architecture
}
})
2. Image Optimization
Use Nuxt Image module:
<NuxtImg
src="/large-image.jpg"
format="webp"
quality="80"
:width="800"
:height="600"
loading="lazy"
:modifiers="{ fit: 'cover' }"
/>
3. Font Optimization
export default defineNuxtConfig({
app: {
head: {
link: [
{
rel: 'preconnect',
href: 'https://fonts.googleapis.com'
},
{
rel: 'preload',
href: '/fonts/custom.woff2',
as: 'font',
type: 'font/woff2',
crossorigin: 'anonymous'
}
]
}
}
})
4. Bundle Size Optimization
Analyze your bundle:
nuxt analyze
Tree-shake unused code:
export default defineNuxtConfig({
vite: {
build: {
rollupOptions: {
output: {
manualChunks: {
'vendor': ['vue', 'vue-router'],
'ui': ['@nuxt/ui']
}
}
}
}
}
})
5. Caching Strategies
API caching:
const { data } = await useFetch('/api/products', {
key: 'products',
getCachedData: (key) => useNuxtApp().payload.data[key]
})
Static assets caching:
export default defineNuxtConfig({
nitro: {
compressPublicAssets: {
gzip: true,
brotli: true
}
}
})
Performance Monitoring Tools
1. Lighthouse CI
Integrate into your CI/CD:
# .github/workflows/lighthouse.yml
- name: Run Lighthouse
uses: treosh/lighthouse-ci-action@v9
with:
urls: |
https://example.com
https://example.com/blog
2. Web Vitals Library
// plugins/web-vitals.client.ts
export default defineNuxtPlugin(() => {
if (process.client) {
import('web-vitals').then(({ onCLS, onINP, onLCP }) => {
onCLS(console.log)
onINP(console.log)
onLCP(console.log)
})
}
})
3. Nuxt DevTools
Built-in performance insights:
- Component render times
- Route loading performance
- Bundle size analysis
- Network waterfall
Real-World Optimization Checklist
- Enable SSR/SSG where appropriate
- Implement proper caching strategies
- Optimize and lazy-load images
- Split code with dynamic imports
- Minimize JavaScript bundle size
- Use compression (Gzip/Brotli)
- Implement service workers for offline support
- Preload critical resources
- Defer non-critical JavaScript
- Monitor Core Web Vitals
- Set up performance budgets
- Use CDN for static assets
Common Performance Pitfalls
- Over-fetching data - Use GraphQL or API filtering
- Not using
keyinv-for- Causes unnecessary re-renders - Large client-side state - Move to server when possible
- Blocking third-party scripts - Load async/defer
- Missing error boundaries - One error crashes the app
- No loading states - Users don't know what's happening
- Synchronous operations - Always prefer async
- Memory leaks - Clean up event listeners and timers
Measuring Success
Track these metrics:
// composables/usePerformance.ts
export const usePerformance = () => {
const metrics = {
ttfb: 0, // Time to First Byte
fcp: 0, // First Contentful Paint
lcp: 0, // Largest Contentful Paint
cls: 0, // Cumulative Layout Shift
inp: 0 // Interaction to Next Paint
}
// Implementation...
return { metrics }
}
Conclusion
Performance optimization is an ongoing process that requires constant attention and monitoring. With Nuxt 4's powerful features and the techniques outlined in this guide, you can build blazing-fast applications that delight users and rank well in search engines.
Remember: Performance is a feature, not an afterthought. Start optimizing from day one, measure everything, and iterate continuously.
Next Steps
- Run Lighthouse audit on your app
- Identify the biggest bottlenecks
- Implement one optimization at a time
- Measure the impact
- Repeat
Happy optimizing! 🚀