Développement

Optimisation des performances Next.js : Guide pratique pour accélérer vos applications

Apprenez à accélérer les applications Next.js avec l'optimisation d'images, le fractionnement de code, la génération statique, le chargement de polices et la réduction de la taille des bundles.

By Mohamed DjoudirJune 07, 20255 min read
Partager:
Optimisation des performances Next.js : Guide pratique pour accélérer vos applications
#Next.js#Performance#Optimisation#React

Créer des applications web rapides est essentiel. Next.js fournit de nombreuses fonctionnalités de performance intégrées, mais il est important de suivre les évolutions récentes (v14/v15) :

  • Node.js minimum : 18.17.
  • La commande next export est remplacée par output: 'export' dans next.config.js.
  • Le package @next/font est supprimé, utilisez next/font intégré.
  • Les APIs cookies, headers, draftMode sont désormais asynchrones (await requis) en Next.js 15.
  • Les requêtes fetch ne sont plus mises en cache par défaut (cache: 'force-cache' si besoin).
  • Certaines options de configuration ont changé (experimental-edgeedge).
  • Pensez à mettre à jour @types/react et @types/react-dom si vous utilisez TypeScript.

Voir le guide officiel de migration pour plus de détails.

Optimisation des Images

Les images volumineuses ou non optimisées sont un goulot d'étranglement courant. Le composant <Image> intégré de Next.js aide à optimiser automatiquement les images pour vous. Il sert des images de taille correcte dans des formats modernes (comme WebP/AVIF) et active le chargement paresseux par défaut. Par exemple, utilisez simplement <Image> dans votre composant :

1import Image from "next/image";
2
3export default function Hero() {
4  return (
5    <div>
6      <Image
7        src="/images/hero.jpg"
8        alt="Section Hero"
9        width={1200}
10        height={600}
11        priority
12      />
13      <p>Bienvenue sur le site !</p>
14    </div>
15  );
16}
  • Chargement paresseux : Les images se chargent uniquement lorsqu'elles entrent dans la fenêtre d'affichage, réduisant le poids de chargement initial.
  • Tailles réactives : <Image> sélectionne automatiquement une taille et un format appropriés (par exemple WebP) pour chaque appareil.
  • Espaces réservés : Vous pouvez utiliser placeholder="blur" pour afficher un aperçu de faible qualité pendant que l'image complète se charge.

En utilisant <Image>, vous obtenez une compression intelligente, un dimensionnement approprié et un Cumulative Layout Shift (CLS) amélioré automatiquement.

Fractionnement de Code et Chargement Paresseux

Next.js fractionne automatiquement votre code au niveau de la page. Chaque page et Composant Serveur est regroupé séparément, donc seul le JavaScript nécessaire pour la page actuelle est chargé initialement. Cependant, vous pouvez réduire davantage le temps de chargement initial en chargeant paresseusement des composants ou des bibliothèques non critiques.

1import dynamic from "next/dynamic";
2
3const DynamicChart = dynamic(() => import("../components/Chart"), {
4  loading: () => <p>Chargement du graphique...</p>,
5});
6
7export default function Dashboard() {
8  return (
9    <div>
10      <h1>Tableau de Bord des Ventes</h1>
11      <DynamicChart />
12    </div>
13  );
14}

Dans l'exemple ci-dessus, le composant Chart (qui pourrait être une grande bibliothèque de graphiques) n'est pas inclus dans le bundle principal.

Génération Statique (SSG) et Mises à Jour Incrémentales

Next.js prend en charge plusieurs stratégies de rendu. La Génération de Site Statique (SSG) est souvent la plus rapide : les pages sont pré-construites au moment de la construction et servies en tant que HTML statique.

1// pages/index.js
2export async function getStaticProps() {
3  const res = await fetch("https://api.example.com/posts");
4  const posts = await res.json();
5  return { props: { posts } };
6}
7
8export default function HomePage({ posts }) {
9  return (
10    <div>
11      <h1>Derniers Articles</h1>
12      <ul>
13        {posts.map((post) => (
14          <li key={post.id}>{post.title}</li>
15        ))}
16      </ul>
17    </div>
18  );
19}

Cela indique à Next.js de générer le HTML pour / une fois pendant next.build. Le résultat est une page extrêmement rapide et statique.

Chargement et Optimisation des Polices

Les polices web peuvent ajouter du temps de chargement supplémentaire et causer des décalages de mise en page. Next.js fournit le module next/font pour aider à optimiser les polices.

1// app/layout.tsx
2import { Roboto } from "next/font/google";
3
4const roboto = Roboto({
5  weight: "400",
6  subsets: ["latin"],
7});
8
9export default function RootLayout({ children }) {
10  return (
11    <html lang="fr" className={roboto.className}>
12      <body>{children}</body>
13    </html>
14  );
15}

Ce code récupère automatiquement la police Roboto au moment de la construction et intègre le CSS nécessaire, éliminant une requête de police supplémentaire.

Minimisation de la Taille du Bundle JavaScript

Réduire votre bundle JavaScript aide tout à se charger plus rapidement :

  • Analysez votre bundle : Utilisez le plugin @next/bundle-analyzer pour visualiser et inspecter la taille de votre bundle.
  • Tree-shaking et optimisation des imports : Importez seulement ce dont vous avez besoin.
  • Utilisez des bibliothèques plus petites : Considérez des alternatives légères.
  • Composants Serveur (App Router) : Si vous utilisez le nouvel App Router, les composants serveur n'envoient pas leur code au client du tout.

Conseils Supplémentaires et Outils

  • Utilisez la mise en cache HTTP : Les actifs statiques de Next.js peuvent être mis en cache par les CDN.
  • Activez gzip/Brotli : Compressez les réponses si vous hébergez sur un serveur personnalisé.
  • Mesurez les Core Web Vitals : Utilisez Lighthouse ou Next.js Analytics pour auditer les performances de votre application.

Conclusion

L'optimisation des performances Next.js consiste à combiner plusieurs petites améliorations. Utilisez les fonctionnalités intégrées de Next.js avec les meilleures pratiques. Ces étapes amélioreront les temps de chargement, les scores Core Web Vitals et, finalement, la satisfaction des utilisateurs.

Cet article vous a été utile?

Partager:

Communauté Mondiale d'Utilisateurs

Rejoignez des milliers de développeurs à travers le monde qui font confiance à Aniq-UI pour leurs projets. Nos modèles sont utilisés partout dans le monde pour créer des expériences web impressionnantes.

world map