Performance

Bundle size delle UI library: quello che le docs non dicono

Il numero sul sito della libreria non è il costo nel tuo progetto. Ecco cosa pesa davvero, come misurarlo e le cinque domande da fare prima di scegliere.

In sintesi

  • Misura il bundle della tua pagina, non il pacchetto npm.
  • Icone, date, motion e chart sono spesso più pesanti del componente.
  • Tree shaking e import mirati contano più del numero di componenti offerti.

Una libreria può dichiarare “leggera” e aggiungere 80 KB al tuo progetto. Il numero che conta non è quello del pacchetto: è quello che arriva al browser dopo il tree shaking, con le tue import e i tuoi polyfill.

Cosa pesa davvero

  • React e React DOM: la base, quasi sempre condivisa.
  • Icone: un set intero importato per errore può superare il componente.
  • Motion: una libreria di animazione pesa più di un CSS transition.
  • Date: formattazione e timezone sono un costo nascosto.
  • Chart: una singola dashboard può valere metà del bundle.

Come misurarlo

Parti dal build di produzione, non dal dev server. Guarda i chunk, il gzip e il costo per route. Poi ripeti dopo aver eliminato una dipendenza: se il numero non cambia, non era quella la causa.

npm run build
npx vite-bundle-visualizer
# oppure
npx source-map-explorer dist/assets/*.js

Il caso EneUI

Il bundle entry della home EneUI è oggi circa 137,9 KB minificati e 43,2 KB gzip, con React in un chunk vendor separato. Abbiamo scelto di incorporare `web-vitals` invece di caricarlo come richiesta separata: 4,6 KB in più nel bundle, una richiesta in meno nella dependency tree.

È un esempio del compromesso reale: il numero più piccolo non è sempre la pagina più veloce. Contano catena di richieste, cache, parsing ed esecuzione.

Le cinque domande al venditore

DomandaPerché
Il componente è tree-shakable?Un import può trascinare l’intera libreria
Le icone sono incluse?Spesso sono il vero peso
Quante dipendenze transitive?Il costo non è nel package.json principale
Qual è il costo della route, non del pacchetto?Il browser paga il bundle, non npm
C’è una versione senza JS?Per contenuto e SEO, il markup deve esistere

Se vuoi partire da un componente già misurato, apri il catalogo e controlla dipendenze e licenza nel record.

Domande frequenti

Quanto deve pesare una UI library?

Non esiste una soglia unica. Una pagina marketing dovrebbe stare sotto poche centinaia di KB di JS; una dashboard può averne di più. Misura la route, non il pacchetto.

Il gzip è il numero giusto?

È il numero che viaggia sulla rete. Per il costo di esecuzione conta anche il parse e il numero di moduli.

Le icone contano davvero?

Sì. Un set importato in blocco può pesare più del componente che stai usando. Importa solo le icone necessarie.

Meglio CSS o JS per le animazioni?

Per transizioni semplici, CSS. Per orchestrazione, gesture e layout condivisi, una libreria JS può valere il costo.

Come riduco il bundle senza riscrivere tutto?

Parti dalle route, rimuovi import inutilizzati, controlla le icone e sostituisci una dipendenza alla volta misurando il risultato.