Comment optimiser un projet Next.js qui est extrêmement lent ?

viajero97 ES 📗 Étudiant 👁 100 ⚑ Signaler Programmation

J'ai une application en Next.js 14 qui est assez lourde et qui se charge très lentement, surtout sur mobile. J'ai essayé d'utiliser des imports dynamiques mais je remarque toujours du lag à la navigation. Qu'est-ce que je peux essayer d'autre pour améliorer la performance sans tout réécrire ?

5 réponses

★ Meilleure réponse

Tu as déjà regardé ce qui rend vraiment le bundle lourd, ou tu tires à l'aveugle ? D'abord, utilise `next/image` si tu as des images non optimisées (ça fait une différence dingue sur mobile), après vérifie s'il y a des grosses librairies que tu peux remplacer par des alternatives plus légères, et active `swcMinify` dans `next.config.js` si tu l'as pas encore. Essaie aussi de désactiver les source maps en production, mets en place la `incremental static regeneration` sur les pages qui peuvent être statiques, et utilise `React.memo` ou `useMemo` sur les composants lourds qui se réaffichent bêtement à chaque changement de route. Si t'as encore du lag après ça, tu dois faire un profile avec Chrome DevTools pour voir où ça traîne vraiment, parce que des fois le problème c'est pas le code mais tu fais trop de requêtes ou des fetches bloquantes.

La première chose que je vérifierais, c'est si tu utilises Image de Next.js correctement, parce que les images non optimisées tuent les performances sur mobile. Je jetterais aussi un bon coup d'œil à la taille de ton bundle avec `next/bundle-analyzer` pour voir quelles librairies gonflent trop ton appli. Pour le lag en navigation, essaie d'activer `swcMinify` dans next.config.js si tu ne l'as pas déjà, et vérifie s'il y a des requêtes inutiles côté client - parfois les dynamic imports fonctionnent mais le contenu fait encore des appels que tu pourrais mettre en cache avec revalidation ou ISR. En fonction de quelles sont tes routes les plus lourdes, ça pourrait aussi t'aider de précacher les données avec `getStaticProps` plutôt que de charger tout côté client.

C'est si tu utilises Image de Next.js correctement - souvent les gens chargent des images énormes sans les optimiser et ça tue les performances, surtout sur mobile. en plus, vérifie la taille de ton bundle avec `next/bundle-analyzer` parce que tu as peut-être des librairies lourdes dont tu n'as pas besoin, et envisage d'activer `swcMinify` dans la config si tu ne l'as pas déjà fait.

si la navigation est lente entre les pages, le problème vient probablement du fait que tu fais des requêtes lourdes sur le serveur sans rien mettre en cache - essaie d'utiliser `revalidateTag` ou l'ISR pour que ça ne recalcule pas tout à chaque fois. et en général, je vérifierais ce qui se passe dans DevTools (onglet Network et Performance) pour voir exactement où ça bloque.

La première chose à faire est de vérifier ce qui ralentit ton app avec les DevTools de Chrome (onglets Network et Performance) parce que parfois ce n'est pas Next.js mais tu charges des ressources énormes ou tu fais des requêtes inefficaces. Après, en plus des dynamic imports, essaie Image Optimization (assure-toi d'utiliser `next/image` sérieusement, pas `<img>`), active `swcMinify` dans next.config.js si ce n'est pas déjà fait, et vérifie si tu as du bundle bloat avec `npm run build` et l'analyse de bundle size - souvent tu importes des librairies que tu pourrais remplacer par quelque chose de plus léger ou dont tu n'as pas besoin côté client.

Sur mobile, le problème est généralement plus brutal, donc tue aussi le Javascript inutile : si une section n'interagit pas, rends-la statique avec `generateStaticParams` ou réduis au minimum ce que tu envoies au client. Si le lag survient pendant la navigation, c'est probablement un problème d'appels API ou de calculs lourds - considère de déplacer ça dans un Route Handler ou une Server Action pour ne pas bloquer le client.

La première chose que je vérifierais, c'est si tu utilises `Image` de Next.js correctement (avec width/height définis et formats modernes) parce qu'une app lente sur mobile, c'est généralement un cauchemar d'images non optimisées. Après ça, jette un œil à ton bundle avec `next/bundle-analyzer` pour voir quelles librairies te gonflent le code, parce que des fois tu traînes des dépendances que tu pourrais remplacer par quelque chose de plus léger, et assure-toi aussi que tu fasses du server-side rendering là où ça a du sens au lieu de charger toute la logique côté client.

Votre réponse

Se connecterpour répondre.