Guide complet pour améliorer les performances de votre application Next.js : Core Web Vitals, optimisation des images, code splitting et stratégies de caching.
Next.js est l'un des frameworks React les plus performants, mais même les meilleures technologies nécessitent des optimisations pour atteindre des performances maximales. Dans ce guide, nous explorons les techniques essentielles pour améliorer les Core Web Vitals de votre application Next.js.
Les performances web impactent directement :
Next.js 15 intègre le composant <Image> qui optimise automatiquement vos images.
import Image from 'next/image'
export function Hero() {
return (
<Image
src="/hero.jpg"
alt="Hero image"
width={1200}
height={600}
priority // Pour les images above-the-fold
placeholder="blur"
blurDataURL="data:image/jpeg;base64,..."
/>
)
}
next.config.mjspriority={true}sizes pour adapter la résolution selon l'écran// next.config.mjs
export default {
images: {
formats: ['image/avif', 'image/webp'],
deviceSizes: [640, 750, 828, 1080, 1200, 1920],
},
}
Réduisez la taille de votre bundle JavaScript initial en utilisant les imports dynamiques.
import dynamic from 'next/dynamic'
// Chargement lazy d'un composant lourd
const HeavyChart = dynamic(() => import('@/components/HeavyChart'), {
loading: () => <p>Chargement...</p>,
ssr: false, // Désactive le SSR pour ce composant
})
export default function Dashboard() {
return (
<div>
<h1>Dashboard</h1>
<HeavyChart />
</div>
)
}
Next.js 15 utilise par défaut les React Server Components, qui s'exécutent côté serveur et ne sont pas inclus dans le bundle client.
// Par défaut : Server Component (pas de JavaScript client)
export default async function ProductList() {
const products = await fetch('https://api.example.com/products')
return (
<ul>
{products.map(product => (
<li key={product.id}>{product.name}</li>
))}
</ul>
)
}
// Client Component uniquement si nécessaire
'use client'
import { useState } from 'react'
export function Counter() {
const [count, setCount] = useState(0)
return <button onClick={() => setCount(count + 1)}>{count}</button>
}
Régénérez vos pages statiques en arrière-plan sans rebuild complet.
export const revalidate = 3600 // Revalide toutes les heures
export default async function BlogPost({ params }: { params: { slug: string } }) {
const post = await getPost(params.slug)
return <Article post={post} />
}
export async function GET() {
const data = await fetchData()
return Response.json(data, {
headers: {
'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=30',
},
})
}
Utilisez next/font pour charger les polices de manière optimale.
import { Inter } from 'next/font/google'
const inter = Inter({
subsets: ['latin'],
display: 'swap',
variable: '--font-inter',
})
export default function RootLayout({ children }) {
return (
<html lang="fr" className={inter.variable}>
<body>{children}</body>
</html>
)
}
import { Analytics } from '@vercel/analytics/react'
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics />
</body>
</html>
)
}
npm install -g lighthouse
lighthouse https://votre-site.com --view
next/imagenext/fontL'optimisation des performances Next.js est un processus continu. Surveillez vos Core Web Vitals avec Google Search Console et itérez régulièrement. Une application rapide améliore non seulement l'expérience utilisateur, mais aussi votre référencement naturel.
Besoin d'aide pour optimiser votre application Next.js ? Contactez 8DEV pour un audit performance gratuit.
Mots-clés : Next.js, Performance, Core Web Vitals, React, SEO, Optimisation Web