React Academy · leksjon

Problemet med gjengivelse av store lister

Forstå hvorfor gjengivelse av 10 000 DOM-noder svekker ytelsen kraftig, og hvordan virtualisering løser problemet.

Leksjon 1 av 412 trinn

Problemet med gjengivelse av store lister er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Rendering av 10000 li-elementer

Anta at De går gjennom en tabell med ti tusen elementer og renderer et li-element for hvert av dem. React oppretter pliktoppfyllende ti tusen DOM-noder, selv om bare et par dusin får plass på skjermen samtidig.

De fleste av nodene er utenfor skjermen og usynlige, men nettleseren må likevel opprette, plassere og vedlikeholde hver eneste av dem.

Nettleserens layoutkostnad for store DOM-trær

Nettleseren betaler en reell kostnad for store DOM-trær. Layout, stilberegning og minnebruk øker med antallet noder, så en enorm liste gir tregere første rendering og høyere minnebruk.

Selv enkle interaksjoner kan hakke når motoren må holde styr på og beregne layout på nytt for titusenvis av noder.

Forringet rulleytelse

Det er ved rulling av en enorm liste brukerne merker problemet best. Nettleseren tegner innholdet på nytt og kan måtte beregne layout på nytt når innholdet flyttes. Med for mange noder faller bildefrekvensen under det som oppleves som jevnt.

Resultatet er hakkete og treg rulling som får grensesnittet til å virke uresponsivt, uansett hvor rask resten av appen er.

Måle antall noder i DevTools

De kan bekrefte problemet i Memory-panelet i nettleserens DevTools, som rapporterer antallet DOM-noder på siden. En liste som oppretter tusenvis av noder, blir tydelig synlig her.

Når De ser antallet øke kraftig etter hvert som De renderer flere elementer, får De konkrete bevis på at størrelsen på DOM-en er flaskehalsen.

Konseptet virtualisering

Virtualisering, noen ganger kalt windowing, renderer bare elementene som for øyeblikket er synlige, pluss en liten buffer, i stedet for hele listen. Når De ruller, mountes elementer som kommer inn i synsfeltet, mens elementer som forlater det, unmountes.

Dette holder den aktive DOM-en liten uansett hvor mange elementer datasettet inneholder, slik at DOM-størrelsen ikke lenger avhenger av størrelsen på datasettet.

Beregne det synlige vinduet

Det synlige vinduet beregnes ut fra rulleposisjonen, beholderens høyde og elementhøyden. Ved å dele visningshøyden på elementhøyden får De omtrent hvor mange rader som får plass, og rulleforskyvningen forteller hvilke rader det er.

Biblioteket bruker disse tallene til å avgjøre nøyaktig hvilken del av elementene som skal renderes til enhver tid.

react-virtualized vs react-window vs TanStack Virtual

Flere biblioteker implementerer windowing. react-virtualized har mange funksjoner, men er større, react-window er en mindre og mer fokusert omskriving fra samme utvikler, og TanStack Virtual er et moderne headless-alternativ.

For de fleste lister gir react-window en utmerket balanse mellom enkelhet og ytelse, og derfor fokuserer dette kurset på det.

Når virtualisering er nødvendig

Virtualisering lønner seg når listene er lange, omtrent flere hundre rader eller mer, eller når radene inneholder mange bilder og nestede komponenter. Det er i slike tilfeller DOM-størrelsen faktisk gir ytelsesproblemer.

Uendelige feeder, store datatabeller og chathistorikker er typiske situasjoner der windowing blir nødvendig, ikke bare valgfritt.

Når det ikke er verdt det

For korte lister med noen få dusin enkle elementer tilfører virtualisering kompleksitet uten noen vesentlig fordel. Kostnaden ved absolutt posisjonering og måling kan til og med gi dårligere total ytelse.

Bruk windowing for reelt store datasett. For små datasett er en vanlig map enklere og mer enn rask nok.

Gevinsten

Med windowing beholder en liste med hundre tusen elementer bare de få synlige elementene i DOM-en. Første rendering går derfor raskt, minnebruken holder seg lav, og rullingen blir jevn.

De bytter litt økt kompleksitet i oppsettet mot ytelse som ikke lenger avhenger av hvor mye data De har. Dette er hovedløftet ved virtualisering.

Hurtigsjekk: Når bør De bruke virtualisering?

Avgjør når virtualisering er verdt å bruke.

Oppsummering: Problemet med store lister

Rendering av tusenvis av DOM-noder øker layoutkostnaden, minnebruken og hakkete rulling. Dette kan De bekrefte ved å se på antallet noder i DevTools. Virtualisering renderer bare det synlige vinduet pluss en buffer, slik at DOM-en holdes liten.

react-window er et fokusert og lett alternativ blant react-virtualized og TanStack Virtual. Bruk det for store eller tunge lister, og hopp over det for korte og enkle lister.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Problemet med gjengivelse av store lister» gratis?

Ja – hele teksten i «Problemet med gjengivelse av store lister» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Problemet med gjengivelse av store lister»?

Forstå hvorfor gjengivelse av 10 000 DOM-noder svekker ytelsen kraftig, og hvordan virtualisering løser problemet. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Problemet med gjengivelse av store lister»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Problemet med gjengivelse av store lister
  2. FixedSizeList: Gjengi tusenvis av elementer
  3. VariableSizeList: Dynamiske radhøyder
  4. Kombiner virtualisering med henting av data
← Tilbake til React Academy