đ Avantages de lâarchitecture app/
(Next.js 13+)
Lâarchitecture app/
de Next.js 13+ repose sur plusieurs améliorations majeures, notamment les Server Components, qui optimisent le rendu et les performances globales des applications web. Voici un aperçu des principaux avantages :
1ïžâŁ Server Components : Moins de JavaScript cĂŽtĂ© client
đ Concept clĂ© : Dans app/
, les composants sont par dĂ©faut des Server Components, ce qui signifie quâils sont exĂ©cutĂ©s sur le serveur et ne sont pas envoyĂ©s au navigateur.
â
Moins de JavaScript Ă charger â amĂ©liore le Time to Interactive (TTI).
â
Pas besoin de gĂ©rer des Ă©tats client inutiles â moins de re-renders.
â
AccĂšs direct aux bases de donnĂ©es et API (sans besoin dâAPI routes).
Exemple dâun Server Component (par dĂ©faut) dans app/
:
import db from "@/lib/db"; // Connexion directe à une base de données
export default async function Dashboard() {
const users = await db.getUsers(); // Pas besoin dâAPI externe
return (
<div>
<h1>Liste des utilisateurs</h1>
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
</div>
);
}
Avec pages/
, cette logique aurait nécessité une API Route (/api/users
) pour récupérer les données cÎté client !
2ïžâŁ Une meilleure performance et gestion du rendu
Fonctionnalité | Pages Router (pages/ ) | App Router (app/ ) |
---|---|---|
JavaScript envoyé au client | Plus important | Réduit grùce aux Server Components |
Re-renders client | Plus fréquents | Moins fréquents |
Gestion des données | Nécessite API Routes | Fetching natif dans Server Components |
Streaming | Complexe | Facile via React Suspense |
â
Optimisation automatique : Next.js ne charge que le JavaScript nécessaire.
â
Streaming : Permet dâafficher progressivement le contenu, amĂ©liorant lâexpĂ©rience utilisateur.
â
Prefetching plus intelligent : Next.js charge les pages en arriĂšre-plan avant mĂȘme que lâutilisateur ne clique sur un lien.
3ïžâŁ Un systĂšme de routing et de layouts plus efficace
đ Dans app/
, on peut structurer lâapplication avec des layout.tsx
à différents niveaux pour partager des composants sans les recharger inutilement.
Exemple : Un Layout partagé pour un tableau de bord
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
return (
<div>
<nav>Menu</nav> {/* Gardé en mémoire entre les pages */}
<main>{children}</main>
</div>
);
}
Contrairement Ă _app.js
, le layout.tsx
ne recharge pas lâensemble de lâapplication Ă chaque navigation !
4ïžâŁ MĂ©tadonnĂ©es et SEO intĂ©grĂ©s (generateMetadata
)
â
Plus besoin dâutiliser <Head>
partout comme dans pages/
.
â
Gestion simplifiée et dynamique des balises SEO.
Exemple dâune mĂ©tadonnĂ©e dynamique dans app/
:
export async function generateMetadata({ params }) {
return {
title: `Article : ${params.slug}`,
description: `DĂ©couvrez notre article sur ${params.slug}.`,
};
}
Avec pages/
, cela nécessitait next/head
dans chaque fichier !
5ïžâŁ Server Actions : API Routes simplifiĂ©es
đ Dans app/
, plus besoin de créer des API routes (pages/api/*
).
â
On peut directement appeler des fonctions serveur depuis un composant.
Exemple : Un formulaire qui enregistre des données en base
"use server";
async function sendMessage(formData) {
await db.messages.create({ text: formData.get("message") });
}
export default function ContactPage() {
return (
<form action={sendMessage}>
<textarea name="message" />
<button type="submit">Envoyer</button>
</form>
);
}
Avec pages/
, on aurait dû créer une API Route (/api/send-message
) pour gérer ça !
đ Conclusion : Pourquoi adopter app/
?
â
Moins de JavaScript cĂŽtĂ© client â site plus rapide.
â
Gestion du rendu plus performante â grĂące aux Server Components.
â
SystĂšme de routing plus flexible et intelligent â layouts imbriquĂ©s.
â
SEO natif â plus facile Ă gĂ©rer avec generateMetadata()
.
â
Moins dâAPI routes â remplacĂ©es par les Server Actions.
đĄ LâApp Router de Next.js 13+ offre une approche plus moderne et performante pour les applications React. Si tu crĂ©es un nouveau projet, app/
est la meilleure option ! đ