Skip to Content
🎉 Utilisez JS efficacement →
Next.jsOptimisations ⚡AmĂ©lioration des performances (mise en cache, streaming)

🚀 AmĂ©lioration des performances avec Next.js 13+

Next.js 13+ introduit des fonctionnalités avancées pour optimiser les performances de votre application :

✅ Mise en cache automatique des Server Components
✅ Streaming des donnĂ©es pour un rendu progressif
✅ Optimisation des requĂȘtes cĂŽtĂ© serveur


1ïžâƒŁ Mise en cache des Server Components

Les Server Components sont par défaut mémorisés et réutilisés pour éviter des rendus inutiles.

📌 Exemple : Mise en cache d’une requĂȘte API

app/products/page.tsx
async function getProducts() { const res = await fetch("https://fakestoreapi.com/products", { next: { revalidate: 3600 }, // Revalide les données toutes les heures }); return res.json(); } export default async function ProductsPage() { const products = await getProducts(); return ( <div> <h1>Produits</h1> <ul> {products.map((product) => ( <li key={product.id}>{product.title}</li> ))} </ul> </div> ); }

✅ Explication :

  • fetch() avec { next: { revalidate: 3600 } } met en cache la requĂȘte pendant 1 heure.
  • Pas de rechargement inutile des donnĂ©es tant qu’elles restent valides.

📌 Alternatives :

  • force-cache pour stocker en cache indĂ©finiment.
  • no-store pour dĂ©sactiver totalement la mise en cache.

2ïžâƒŁ Streaming des donnĂ©es avec React Suspense

Grñce au streaming, on peut afficher progressivement les parties d’une page au fur et à mesure du chargement.

📌 Exemple : Affichage progressif des donnĂ©es

app/products/page.tsx
import { Suspense } from "react"; import ProductList from "@/app/products/ProductList"; export default function ProductsPage() { return ( <div> <h1>Produits</h1> <Suspense fallback={<p>Chargement des produits...</p>}> <ProductList /> </Suspense> </div> ); }
app/products/ProductList.tsx
async function getProducts() { await new Promise((resolve) => setTimeout(resolve, 2000)); // Simule un délai réseau const res = await fetch("https://fakestoreapi.com/products", { cache: "no-store" }); return res.json(); } export default async function ProductList() { const products = await getProducts(); return ( <ul> {products.map((product) => ( <li key={product.id}>{product.title}</li> ))} </ul> ); }

✅ Explication :

  • Le titre s’affiche immĂ©diatement pendant que les produits se chargent.
  • Suspense permet de remplacer temporairement le contenu par un message.
  • AmĂ©liore l’expĂ©rience utilisateur en affichant progressivement la page.

3ïžâƒŁ Rendu progressif des Server Components

Next.js permet de charger progressivement les composants d’une page au lieu d’attendre que tout soit prĂȘt.

📌 Exemple : Chargement d’une page avec plusieurs composants

app/dashboard/page.tsx
import { Suspense } from "react"; import Stats from "@/app/dashboard/Stats"; import RecentActivity from "@/app/dashboard/RecentActivity"; export default function DashboardPage() { return ( <div> <h1>Tableau de bord</h1> <Suspense fallback={<p>Chargement des statistiques...</p>}> <Stats /> </Suspense> <Suspense fallback={<p>Chargement des activités récentes...</p>}> <RecentActivity /> </Suspense> </div> ); }

✅ Explication :

  • Chaque composant se charge indĂ©pendamment.
  • Stats et RecentActivity sont affichĂ©s dĂšs qu’ils sont prĂȘts.
  • Aucun blocage du rendu global.

4ïžâƒŁ Optimisation des requĂȘtes avec Parallel Fetching

Next.js permet d’exĂ©cuter plusieurs requĂȘtes en parallĂšle pour un rendu plus rapide.

📌 Exemple : Chargement parallùle de plusieurs API

app/dashboard/page.tsx
async function getUser() { return fetch("https://jsonplaceholder.typicode.com/users/1").then((res) => res.json()); } async function getPosts() { return fetch("https://jsonplaceholder.typicode.com/posts?userId=1").then((res) => res.json()); } export default async function Dashboard() { const [user, posts] = await Promise.all([getUser(), getPosts()]); // ExĂ©cute les requĂȘtes en parallĂšle return ( <div> <h1>Bonjour, {user.name}</h1> <h2>Vos articles :</h2> <ul> {posts.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> </div> ); }

✅ Explication :

  • Promise.all() exĂ©cute deux requĂȘtes simultanĂ©ment.
  • Gagne du temps par rapport Ă  des requĂȘtes sĂ©quentielles.

🎯 Conclusion

🚀 Avec Next.js 13+, on amĂ©liore les performances avec :
✅ Mise en cache avancĂ©e pour limiter les requĂȘtes inutiles.
✅ Streaming & rendu progressif pour un chargement fluide.
✅ ExĂ©cution parallĂšle des requĂȘtes pour un affichage plus rapide.

mis Ă  jour le