Suurten listojen renderöinnin ongelma
Ymmärtäkää, miksi 10 000 DOM-solmun renderöinti romahduttaa suorituskyvyn ja miten virtualisointi ratkaisee ongelman.
Suurten listojen renderöinnin ongelma on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.
10 000 li-elementin renderöinti
Oletetaan, että käytte läpi kymmenentuhannen kohteen taulukon ja renderöitte jokaiselle li-elementin. React luo tunnollisesti 10 000 DOM-solmua, vaikka näytölle mahtuu kerrallaan vain parikymmentä.
Suurin osa solmuista on näytön ulkopuolella ja näkymättömissä, mutta selaimen on silti luotava, aseteltava ja ylläpidettävä jokaista niistä.
Selaimen asettelukustannus suurissa DOM-puissa
Selain maksaa suurista DOM-puista todellisen hinnan. Asettelu, tyylien uudelleenlaskenta ja muisti kasvavat solmujen määrän mukana, joten valtava lista hidastaa ensimmäistä renderöintiä ja kasvattaa muistin käyttöä.
Jopa yksinkertaiset vuorovaikutukset voivat takerrella, kun selainmoottorin on seurattava ja aseteltava uudelleen kymmeniätuhansia solmuja.
Vierityksen suorituskyvyn heikkeneminen
Käyttäjät huomaavat ongelman selvimmin valtavaa listaa vierittäessään. Selain piirtää näkymää uudelleen ja saattaa laskea asettelun uudelleen sisällön liikkuessa, ja liian suuri solmumäärä laskee kuvataajuuden alle sulavan tason.
Tuloksena on nykivä ja viiveinen vieritys, joka saa käyttöliittymän tuntumaan reagoimattomalta, vaikka sovelluksen muu osa olisi kuinka nopea.
Solmujen määrän mittaaminen DevToolsissa
Voitte vahvistaa ongelman selaimen DevToolsin Memory-paneelissa, joka ilmoittaa sivun DOM-solmujen määrän. Tuhansia solmuja luova lista näkyy täällä selvästi.
Kun seuraatte määrän nopeaa kasvua renderöidessänne lisää kohteita, saatte konkreettisen todisteen siitä, että DOMin koko on pullonkaula.
Virtualisoinnin periaate
Virtualisointi, josta käytetään joskus nimitystä ikkunointi, renderöi koko listan sijaan vain parhaillaan näkyvät kohteet ja pienen puskurin niiden ympärille. Vierityksen aikana näkymään tulevat kohteet liitetään DOMiin ja näkymästä poistuvat irrotetaan siitä.
Näin aktiivinen DOM pysyy pienenä riippumatta datan kohteiden määrästä, jolloin DOMin koko ei riipu datajoukon koosta.
Näkyvän ikkunan laskeminen
Näkyvä ikkuna johdetaan vierityssijainnista, säilön korkeudesta ja kohteen korkeudesta. Näyttöalueen korkeuden jakaminen kohteen korkeudella kertoo likimäärin, kuinka monta riviä mahtuu näkyviin, ja vierityksen siirtymä kertoo, mitkä rivit ovat kyseessä.
Kirjasto käyttää näitä lukuja päättääkseen tarkasti, mikä kohteiden osa renderöidään kullakin hetkellä.
react-virtualized vs react-window vs TanStack Virtual
Useat kirjastot toteuttavat ikkunointia. react-virtualized sisältää paljon ominaisuuksia mutta on suurempi, react-window on saman tekijän pienempi ja keskittyneempi uudelleenkirjoitus, ja TanStack Virtual on moderni headless-vaihtoehto.
Useimmille listoille react-window tarjoaa erinomaisen tasapainon yksinkertaisuuden ja suorituskyvyn välillä, minkä vuoksi tämä kurssi keskittyy siihen.
Milloin virtualisointi on tarpeen
Virtualisoinnista on hyötyä, kun listat ovat pitkiä, yleensä vähintään useita satoja rivejä, tai kun rivit sisältävät raskaita kuvia ja sisäkkäisiä komponentteja. Näissä tapauksissa DOMin koko todella heikentää suorituskykyä.
Rajattomat syötteet, suuret datataulukot ja keskusteluhistoriat ovat tyypillisiä tilanteita, joissa ikkunoinnista tulee välttämätöntä eikä vain valinnaista.
Milloin sitä ei kannata käyttää
Muutaman kymmenen yksinkertaisen kohteen lyhyissä listoissa virtualisointi lisää monimutkaisuutta ilman merkittävää hyötyä. Absoluuttisen sijoittelun ja mittaamisen aiheuttama ylimääräinen työ voi jopa heikentää kokonaisuutta.
Varatkaa ikkunointi aidosti suurille datajoukoille; pienissä listoissa tavallinen map on yksinkertaisempi ja täysin riittävän nopea.
Hyöty
Ikkunointia käytettäessä sadantuhannen kohteen listalla DOMissa on vain näkyvissä oleva pieni joukko kohteita, joten ensimmäinen renderöinti on nopea, muistin käyttö pysyy pienenä ja vieritys on sulavaa.
Käyttöönotto monimutkaistuu hieman, mutta vastineeksi suorituskyky ei enää riipu datan määrästä. Tämä on virtualisoinnin keskeinen lupaus.
Pikatarkistus: milloin virtualisoida
Päättäkää, milloin virtualisointi on hyödyllistä.
Kertaus: suurten listojen ongelma
Tuhansien DOM-solmujen renderöinti kasvattaa asettelukustannuksia ja muistin käyttöä sekä tekee vierityksestä nykivää. Voitte vahvistaa tämän tarkistamalla solmujen määrän DevToolsissa. Virtualisointi renderöi vain näkyvän ikkunan ja puskurin, joten DOM pysyy pienenä.
react-window on react-virtualized- ja TanStack Virtual -kirjastojen joukossa keskittynyt ja kevyt vaihtoehto. Käyttäkää sitä suurille tai raskaille listoille ja jättäkää se pois lyhyistä ja yksinkertaisista listoista.
Opi React tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 88
- Oppitunnit
- 324
Usein kysytyt kysymykset
Onko oppitunti ”Suurten listojen renderöinnin ongelma” ilmainen?
Kyllä – oppitunnin ”Suurten listojen renderöinnin ongelma” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Suurten listojen renderöinnin ongelma”?
Ymmärtäkää, miksi 10 000 DOM-solmun renderöinti romahduttaa suorituskyvyn ja miten virtualisointi ratkaisee ongelman. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Suurten listojen renderöinnin ongelma”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?
Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Suurten listojen renderöinnin ongelma
- FixedSizeList: tuhansien kohteiden renderöinti
- VariableSizeList: rivien dynaamiset korkeudet
- Virtualisoinnin yhdistäminen datan hakuun