Il problema del rendering di liste numerose
Comprenda perché il rendering di 10.000 nodi DOM comprometta le prestazioni e come la virtualizzazione risolva il problema.
Il problema del rendering di liste numerose è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
Rendering di 10000 elementi li
Supponiamo di scorrere con map un array di diecimila elementi e di eseguire il rendering di un li per ciascuno. React creerà diligentemente diecimila nodi DOM, anche se sullo schermo ne entrano contemporaneamente solo un paio di dozzine.
La maggior parte di questi nodi è fuori dallo schermo e invisibile, ma il browser deve comunque crearli, eseguirne il layout e mantenerli tutti.
Costo del layout del browser per alberi DOM estesi
Gli alberi DOM estesi hanno un costo concreto per il browser. Il layout, il ricalcolo degli stili e la memoria utilizzata crescono con il numero di nodi, quindi un elenco enorme rallenta il rendering iniziale e aumenta il consumo di memoria.
Anche le interazioni semplici possono procedere a scatti quando il motore deve tenere traccia e ricalcolare il layout di decine di migliaia di nodi.
Peggioramento delle prestazioni durante lo scorrimento
È durante lo scorrimento di un elenco enorme che gli utenti percepiscono maggiormente il problema. Il browser ridisegna il contenuto e può ricalcolare il layout mentre il contenuto si sposta; con troppi nodi, la frequenza dei fotogrammi scende al di sotto del livello di fluidità.
Il risultato è uno scorrimento a scatti e con ritardi, che fa sembrare l'interfaccia poco reattiva indipendentemente dalla velocità del resto dell'app.
Misurare il numero di nodi in DevTools
È possibile confermare il problema nel pannello Memory di DevTools del browser, che indica il numero di nodi DOM presenti nella pagina. Un elenco che crea migliaia di nodi risulta chiaramente visibile in questo pannello.
Osservare questo numero aumentare rapidamente mentre si esegue il rendering di più elementi fornisce una prova concreta che la dimensione del DOM è il collo di bottiglia.
Il concetto di virtualizzazione
La virtualizzazione, talvolta chiamata windowing, esegue il rendering solo degli elementi attualmente visibili e di un piccolo buffer, anziché dell'intero elenco. Durante lo scorrimento, gli elementi che entrano nell'area visibile vengono montati, mentre quelli che ne escono vengono smontati.
In questo modo il DOM attivo rimane ridotto indipendentemente dal numero di elementi contenuti nei dati, separando la dimensione del DOM da quella del dataset.
Calcolare la finestra visibile
La finestra visibile viene ricavata dalla posizione dello scorrimento, dall'altezza del contenitore e dall'altezza degli elementi. Dividere l'altezza dell'area visibile per l'altezza di un elemento indica approssimativamente quante righe vi entrano, mentre l'offset di scorrimento indica quali sono.
La libreria utilizza questi numeri per decidere esattamente quale sottoinsieme di elementi eseguire in ogni momento.
react-virtualized vs react-window vs TanStack Virtual
Diverse librerie implementano il windowing. react-virtualized offre molte funzionalità, ma è più grande; react-window è una riscrittura più compatta e mirata dello stesso autore; TanStack Virtual è un'opzione moderna headless.
Per la maggior parte degli elenchi, react-window offre un eccellente equilibrio tra semplicità e prestazioni, ed è per questo che il corso si concentra su questa libreria.
Quando la virtualizzazione è necessaria
La virtualizzazione è vantaggiosa quando gli elenchi sono lunghi, indicativamente di diverse centinaia di righe o più, oppure quando le righe contengono molte immagini e componenti annidati. Sono questi i casi in cui la dimensione del DOM ha un impatto reale sulle prestazioni.
I feed infiniti, le tabelle di dati estese e le cronologie delle chat sono scenari tipici in cui il windowing diventa essenziale anziché facoltativo.
Quando non ne vale la pena
Per elenchi brevi di poche dozzine di elementi semplici, la virtualizzazione aggiunge complessità senza offrire vantaggi significativi. Il posizionamento assoluto e il sovraccarico delle misurazioni possono persino peggiorare complessivamente le prestazioni.
Riservi il windowing ai dataset realmente estesi; per quelli piccoli, un semplice map è più intuitivo e perfettamente veloce.
Il vantaggio
Con il windowing, un elenco di centomila elementi mantiene nel DOM soltanto i pochi elementi visibili: il rendering iniziale è rapido, il consumo di memoria rimane basso e lo scorrimento è fluido.
Si accetta un po' di complessità in più nella configurazione in cambio di prestazioni che non dipendono più dalla quantità di dati, che è la promessa fondamentale della virtualizzazione.
Verifica rapida: quando usare la virtualizzazione
Decida quando vale la pena usare la virtualizzazione.
Riepilogo: il problema degli elenchi estesi
Eseguire il rendering di migliaia di nodi DOM aumenta il costo del layout, il consumo di memoria e gli scatti durante lo scorrimento; è possibile confermarlo tramite il conteggio dei nodi in DevTools. La virtualizzazione esegue il rendering solo della finestra visibile e di un buffer, mantenendo ridotte le dimensioni del DOM.
react-window è una scelta mirata e leggera tra react-virtualized e TanStack Virtual. Lo si utilizzi per elenchi estesi o pesanti e lo si eviti per quelli brevi e semplici.
Domande Frequenti
La lezione «Il problema del rendering di liste numerose» è gratuita?
Sì — il testo completo di «Il problema del rendering di liste numerose» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Il problema del rendering di liste numerose»?
Comprenda perché il rendering di 10.000 nodi DOM comprometta le prestazioni e come la virtualizzazione risolva il problema. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Il problema del rendering di liste numerose»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Il problema del rendering di liste numerose
- FixedSizeList: rendering di migliaia di elementi
- VariableSizeList: altezze dinamiche delle righe
- Combinare virtualizzazione e recupero dei dati