⊗jsrtPmHkUMe 14 of 47 menu

Jõudluse optimeerimise konks useMemo Reactis

Esimene jõudluse optimeerimise konks, mida me vaatleme, on useMemo.

See konks aitab vahemällu salvestada ressursimahukate operatsioonide tulemusi ekraani ümberjoonistamise hetkedel ja seega aitab vältida liigseid mahukaid arvutusi. Sellist vahemällu salvestamist nimetatakse ka memoizatsiooniks.

Vaatame, kuidas see töötab. Loome komponendi nupuga ja pealkirjaga h3:

return ( <div> <h3>Tekst</h3> <button>klõpsa</button> </div> );

Ja nüüd teeme nii, et pealkirjale klõpsates muudaks selle värvi oranžist roheliseks ja tagasi. Alustuseks loome oleku isGreen:

const [isGreen, setIsGreen] = useState(false);

Lisame atribuuti style pealkirjale tingimuse värvi muutmiseks ja lisame klõpsu töötleja:

<h3 onClick={() => setIsGreen(!isGreen)} style={{ color: isGreen ? 'green' : 'orangered' }} >Tekst</h3>

Olgu meil ka mingi väärtus, mis suureneb meie nupule klõpsates ühe võrra. Loome selle jaoks oleku:

const [num, setNum] = useState(0);

Lisame nupule klõpsamise töötlemise:

<button onClick={() => setNum(num + 1)}> klõpsud </button>

Olgu meil ka mingi funktsioon square, mis tagastab väärtuse num ruudu. Funktsiooni käivitamise tulemuse paneme muutujasse result:

const result = square(num); function square(num) { return num * num; }

Kuvame result nupu tekstis:

<button onClick={() => setNum(num + 1)}> klõpsud: {result} </button>

Tulemuseks saime järgmise: nupule klõpsates muutub väärtus num, mis seejärel tõstetakse ruutu, ja pealkirjale klõpsates muutub pealkirja värv.

Meil on väga väike komponent, kõik töötab kiiresti, hoolimata asjaolust, et pealkirjale klõpsates selle värvi muutmiseks joonistatakse kogu komponent uuesti, seega toimuvad uuesti ka arvutused, mis on seotud nupuga, isegi siis kui me seda ei puudutanud. Ja nüüd kujutage ette, kui meie arvutused oleksid mahukad ja kõik arvutataks uuesti iga kord.

Teeme oma funktsiooni natuke raskemaks, nüüd see mõtleb veidi kauem. Nii me simuleerime pikki arvutusi:

function square(num) { let startTime = performance.now(); while (performance.now() - startTime < 500) { // Lihtsalt ei tee midagi ... } return num * num; }

Klõpsake nüüd pealkirjal. Selgub, et nüüd pika funktsiooni töö tõttu square (aga nuppu me ju ei puuduta) peame terve igaviku ootama, et pealkirjal värvi muutuks!

Siin tulebki meile appi konks useMemo. Selleks peame esimeseks parameetriks edastama funktsiooni, mis arvutab väärtuse, mida tahame vahemällu hoida, see funktsioon peab olema puhas ja mitte võtma ühtegi parameetrit. Ja teiseks parameetriks - sõltuvused nurksulgudes , teisisõnu kõik reaktiivsed väärtused, mis osalevad funktsiooni koodis. Seega kirjutame result me nüüd sellise konstruktsiooni:

const result = useMemo(() => square(num), [num]);

Klõpsame uuesti pealkirjal. Nüüd, kui me ei puuduta arvutustega nuppu ega muuda seeläbi oleku väärtust num, siis midagi ei arvutata uuesti, ja React kuvab vahemällu salvestatud väärtuse nupus, seega meie pealkiri muudab oma värvi kiiresti.

Looge komponent App, asetage sinna lõik. Looge olek text algväärtusega 'react', laske oleku väärtust kuvatakse lõigu tekstina. Laske lõigule klõpsates lisatakse selle teksti lõppu hüüumärk.

Looge veel üks olek num, algväärtusega 0. Asetage App veel üks lõik. Tehke nii, et sellele klõpsates num suureneks 1 võrra.

Ja nüüd lisage App funktsioon triple, mis parameetrina võtab num ja tagastab selle kolmekordse väärtuse. Pange funktsiooni käivitamise tulemus muutujasse result. Kuvage result teise lõigu tekstina. Klõpsake kordamööda lõikudele, märkige, kui aeglaselt lisatakse hüüumärke.

Parandage olukorda, mähkides aeglase funktsiooni triple useMemo sisse.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu