2 risposte

★ Miglior risposta
lea65 BE 🔍 Appassionato 💬 30 risposte

La cosa che davvero cambia tutto è controllare la dimensione del bundle con `next/image` e gli import dinamici - molti si dimenticano che Next.js carica tutto per default al build se non stai attento. L'altra risposta parla di dipendenze pesanti, è vero, ma devi anche guardare le tue API call all'avvio e i tuoi font Google o altre risorse esterne che bloccano il rendering. Prova `next/dynamic` per i componenti non critici, disabilita i sourcemap in produzione, e usa `measureUserAgentSpecificMemory()` per tracciare quello che rallenta davvero - il 90% delle volte è qualcosa di stupido tipo una lib caricata inutilmente o una richiesta di rete che si trascina.

Ho avuto dei siti che andavano a rilento all'avvio ed era generalmente legato a un paio di cose classiche. Prima di tutto, verifica se stai caricando dipendenze massicce all'avvio - tipo librerie per l'UI o utility che potresti importare dinamicamente con `next/dynamic`. Poi dai un'occhiata al tuo `_app.tsx` o `_app.js`: se fai un sacco di cose dentro (chiamate API globali, istanziazione di context enormi), rallenta tutto. La config di Next.js stessa può essere il problema - plugin Webpack che traggono, una cattiva config di TypeScript, o troppe route pre-generate se usi la generazione statica.

Dopo puoi provare un paio di cose concrete. Lancia `next build` e guarda il report - ti mostra il peso dei chunk. Se alcuni file sono enormi, fai più code-split con la lazy loading. Disabilita le feature che non usi (ISR se non la usi, le API route se sono inutili per te). E una cosa classica: assicurati che il tuo modo dev (`next dev`) non sia solo... in modo dev - a volte il problema viene di lì e non è rappresentativo del build finale.

Se è davvero all'avvio in produzione, dai un'occhiata anche al tuo hosting - a volte è una questione di cold start se sei su una piattaforma serverless, o solo risorse troppo limitate. Ma in generale è del codice che trascina da qualche parte.

La tua risposta

Accediper rispondere.