Looge kiiremaid veebirakendusi, mõistes brauseri renderdamise torujuhet ja kuidas JavaScript võib jõudlust pärssida. Õppige optimeerima sujuva kasutajakogemuse nimel.
Veebilehitseja renderdamise torujuhtme valdamine: sügavuti JavaScripti mõjust jõudlusele
Digitaalses maailmas ei ole kiirus pelgalt funktsioon; see on suurepärase kasutajakogemuse alus. Aeglane, mitte reageeriv veebisait võib põhjustada kasutajate frustratsiooni, suurendada põrkemäära ja lõppkokkuvõttes negatiivselt mõjutada ärieesmärke. Veebiarendajatena oleme selle kogemuse arhitektid ja on ülioluline mõista põhilist mehaanikat, kuidas brauser muudab meie koodi visuaalseks, interaktiivseks leheks. Seda protsessi, mis on sageli keerukusse mähitud, tuntakse kui brauseri renderdamise torujuhet.
Kaasaegse veebiinteraktiivsuse keskmes on JavaScript. See on keel, mis äratab meie staatilised lehed ellu, võimaldades kõike alates dünaamilistest sisuuuendustest kuni keerukate üheleheliste rakendusteni. Suure väega kaasneb aga suur vastutus. Optimeerimata JavaScript on üks levinumaid süüdlasi halva veebijõudluse taga. See võib katkestada, viivitada või sundida brauseri renderdamise torujuhet tegema kulukat, üleliigset tööd, mis viib kardetud 'hakkimiseni' (jank) – katkendlike animatsioonide, aeglase reageerimiseni kasutaja sisendile ja üldiselt loiule tundele.
See põhjalik juhend on mõeldud front-end arendajatele, jõudlusinseneridele ja kõigile, kes on kirglikud kiirema veebi ehitamise vastu. Me demüstifitseerime brauseri renderdamise torujuhtme, jaotades selle arusaadavateks etappideks. Veelgi olulisem on see, et me heidame valgust JavaScripti rollile selles protsessis, uurides täpselt, kuidas see võib muutuda jõudluse kitsaskohaks ja, mis kõige tähtsam, mida saame selle leevendamiseks teha. Lõpuks olete varustatud teadmiste ja praktiliste strateegiatega, et kirjutada jõudluslikumat JavaScripti ja pakkuda sujuvat, meeldivat kogemust oma kasutajatele üle kogu maailma.
Veebi plaan: brauseri renderdamise torujuhtme lahtivõtmine
Enne kui saame optimeerida, peame kõigepealt mõistma. Brauseri renderdamise torujuhe (tuntud ka kui kriitiline renderdamise tee) on sammude jada, mida brauser järgib, et muuta teie kirjutatud HTML, CSS ja JavaScript piksliteks ekraanil. Mõelge sellest kui ülitõhusast tehase konveierliinist. Igal jaamal on konkreetne ülesanne ja kogu liini tõhusus sõltub sellest, kui sujuvalt toode ühelt jaamalt teisele liigub.
Kuigi spetsiifika võib brauserimootorite vahel veidi erineda (nagu Blink Chrome'i/Edge'i jaoks, Gecko Firefoxi jaoks ja WebKit Safari jaoks), on põhietapid kontseptuaalselt samad. Käime selle konveierliini läbi.
1. samm: parsimine - koodist mõistmiseni
Protsess algab toorete tekstipõhiste ressurssidega: teie HTML- ja CSS-failidega. Brauser ei saa nendega otse töötada; see peab need parsimise teel muutma struktuuriks, mida ta mõistab.
- HTML-i parsimine DOM-iks: brauseri HTML-parser töötleb HTML-märgistust, jagades selle osadeks (tokenizing) ja ehitades sellest puulaadse andmestruktuuri, mida nimetatakse dokumendi objektimudeliks (DOM). DOM esindab lehe sisu ja struktuuri. Iga HTML-märgend muutub selles puus 'sõlmeks', luues vanema-lapse suhte, mis peegeldab teie dokumendi hierarhiat.
- CSS-i parsimine CSSOM-iks: samaaegselt, kui brauser kohtab CSS-i (kas
<style>
märgendis või välises<link>
stiililehes), parsib see selle, et luua CSS-i objektimudel (CSSOM). Sarnaselt DOM-ile on CSSOM puustruktuur, mis sisaldab kõiki DOM-i sõlmedega seotud stiile, sealhulgas kaudseid brauseri vaikestiile ja teie selgesõnalisi reegleid.
Kriitiline punkt: CSS-i peetakse renderdamist blokeerivaks ressursiks. Brauser ei renderda ühtegi lehe osa enne, kui see on kogu CSS-i täielikult alla laadinud ja parsinud. Miks? Sest see peab teadma iga elemendi lõplikke stiile, enne kui saab kindlaks määrata, kuidas lehte paigutada. Stiilideta leht, mis äkki end ümber stiliseerib, oleks häiriv kasutajakogemus.
2. samm: renderduspuu - visuaalne plaan
Kui brauseril on nii DOM (sisu) kui ka CSSOM (stiilid), ühendab see need, et luua renderduspuu. See puu on esitus sellest, mida tegelikult lehel kuvatakse.
Renderduspuu ei ole DOM-i üks-ühele koopia. See sisaldab ainult visuaalselt olulisi sõlmi. Näiteks:
- Sõlmed nagu
<head>
,<script>
või<meta>
, millel pole visuaalset väljundit, jäetakse välja. - Sõlmed, mis on CSS-i kaudu selgesõnaliselt peidetud (nt
display: none;
), jäetakse samuti renderduspuust välja. (Märkus: elemendid atribuudigavisibility: hidden;
kaasatakse, kuna need võtavad endiselt paigutuses ruumi).
Iga renderduspuu sõlm sisaldab nii oma sisu DOM-ist kui ka arvutatud stiile CSSOM-ist.
3. samm: paigutus (või ümberpaigutus)
Kui renderduspuu on konstrueeritud, teab brauser nüüd, mida renderdada, kuid mitte kus või kui suurt. See on paigutuse etapi ülesanne. Brauser läbib renderduspuu, alustades juurest, ja arvutab iga sõlme täpse geomeetrilise teabe: selle suuruse (laius, kõrgus) ja asukoha lehel vaateakna suhtes.
Seda protsessi tuntakse ka kui ümberpaigutust (Reflow). Mõiste 'reflow' on eriti tabav, sest muudatus ühes elemendis võib põhjustada ahelreaktsiooni, mis nõuab selle laste, esivanemate ja õdede-vendade geomeetria ümberarvutamist. Näiteks vanema elemendi laiuse muutmine põhjustab tõenäoliselt ümberpaigutuse kõigi selle järeltulijate jaoks. See muudab paigutuse potentsiaalselt väga arvutusmahukaks operatsiooniks.
4. samm: värvimine - pikslite täitmine
Nüüd, kui brauser teab iga elemendi struktuuri, stiile, suurust ja asukohta, on aeg see teave ekraanil tegelikeks piksliteks muuta. Värvimise etapp (või ülevärvimine (Repaint)) hõlmab iga sõlme kõigi visuaalsete osade pikslite täitmist: värvid, tekst, pildid, äärised, varjud jne.
Selle protsessi tõhusamaks muutmiseks ei värvi kaasaegsed brauserid ainult ühele lõuendile. Nad jaotavad lehe sageli mitmeks kihiks. Näiteks keeruline element CSS-i transform
atribuudiga või <video>
element võidakse tõsta omaette kihile. Värvimine võib seejärel toimuda kihipõhiselt, mis on viimase sammu jaoks ülioluline optimeerimine.
5. samm: komponeerimine - lõpliku pildi kokkupanek
Viimane etapp on komponeerimine. Brauser võtab kõik eraldi värvitud kihid ja paneb need õiges järjekorras kokku, et luua ekraanil kuvatav lõplik pilt. Siin ilmneb kihtide võimsus.
Kui animeerite elementi, mis on omaette kihil (näiteks kasutades transform: translateX(10px);
), ei pea brauser uuesti käivitama paigutuse või värvimise etappe terve lehe jaoks. See saab lihtsalt olemasolevat värvitud kihti liigutada. See töö delegeeritakse sageli graafikaprotsessorile (GPU), mis teeb selle uskumatult kiireks ja tõhusaks. See on siidiselt sujuvate, 60 kaadrit sekundis (fps) animatsioonide saladus.
JavaScripti suur tulek: interaktiivsuse mootor
Kuhu siis JavaScript sellesse korralikult järjestatud torujuhtmesse sobib? Kõikjale. JavaScript on dünaamiline jõud, mis võib DOM-i ja CSSOM-i muuta igal hetkel pärast nende loomist. See on selle peamine funktsioon ja suurim jõudlusrisk.
Vaikimisi on JavaScript parserit blokeeriv. Kui HTML-parser kohtab <script>
märgendit (mida ei ole märgitud async
või defer
atribuudiga), peab see DOM-i ehitamise protsessi peatama. Seejärel hangib see skripti (kui see on väline), käivitab selle ja alles siis jätkab HTML-i parsimist. Kui see skript asub teie dokumendi <head>
osas, võib see oluliselt viivitada teie lehe esialgset renderdamist, kuna DOM-i ehitamine on peatatud.
Blokeerida või mitte blokeerida: `async` ja `defer`
Selle blokeeriva käitumise leevendamiseks on meil <script>
märgendi jaoks kaks võimsat atribuuti:
defer
: see atribuut ütleb brauserile, et skript laaditaks alla taustal, samal ajal kui HTML-i parsimine jätkub. Skript käivitatakse garanteeritult alles pärast seda, kui HTML-parser on lõpetanud, kuid enneDOMContentLoaded
sündmuse käivitumist. Kui teil on mitu `defer` atribuudiga skripti, käivitatakse need dokumendis ilmumise järjekorras. See on suurepärane valik skriptide jaoks, mis vajavad täielikku DOM-i ja mille käivitamise järjekord on oluline.async
: see atribuut ütleb samuti brauserile, et skript laaditaks alla taustal ilma HTML-i parsimist blokeerimata. Kuid niipea, kui skript on alla laaditud, peatub HTML-parser ja skript käivitatakse. `async` skriptidel ei ole garanteeritud käivitamise järjekorda. See sobib sõltumatutele, kolmandate osapoolte skriptidele nagu analüütika või reklaamid, kus käivitamise järjekord ei ole oluline ja soovite, et need käivituksid niipea kui võimalik.
Võim muuta kõike: DOM-i ja CSSOM-i manipuleerimine
Pärast käivitamist on JavaScriptil täielik API-juurdepääs nii DOM-ile kui ka CSSOM-ile. See saab lisada elemente, eemaldada neid, muuta nende sisu ja muuta nende stiile. Näiteks:
document.getElementById('welcome-banner').style.display = 'none';
See üks rida JavaScripti muudab 'welcome-banner' elemendi CSSOM-i. See muudatus muudab olemasoleva renderduspuu kehtetuks, sundides brauserit uuesti käivitama osasid renderdamise torujuhtmest, et värskendust ekraanil kajastada.
Jõudluse süüdlased: kuidas JavaScript torujuhet ummistab
Iga kord, kui JavaScript muudab DOM-i või CSSOM-i, riskib see ümberpaigutuse (reflow) ja ülevärvimise (repaint) käivitamisega. Kuigi see on dünaamilise veebi jaoks vajalik, võib nende operatsioonide ebaefektiivne sooritamine teie rakenduse täielikult peatada. Uurime kõige levinumaid jõudluse lõkse.
Nõiaring: sunnitud sünkroonsete paigutuste ja paigutuse rüseluse esilekutsumine
See on vaieldamatult üks tõsisemaid ja peenemaid jõudlusprobleeme front-end arenduses. Nagu me arutasime, on paigutus kulukas operatsioon. Tõhususe huvides on brauserid targad ja püüavad DOM-i muudatusi pakettidena töödelda. Nad panevad teie JavaScripti stiilimuudatused järjekorda ja siis, hilisemal hetkel (tavaliselt praeguse kaadri lõpus), teostavad nad ühe paigutuse arvutuse, et rakendada kõik muudatused korraga.
Kuid te saate selle optimeerimise rikkuda. Kui teie JavaScript muudab stiili ja seejärel kohe küsib geomeetrilist väärtust (nagu elemendi offsetHeight
, offsetWidth
või getBoundingClientRect()
), sunnite te brauserit teostama paigutuse etapi sünkroonselt. Brauser peab peatuma, rakendama kõik ootel stiilimuudatused, käivitama täieliku paigutuse arvutuse ja seejärel tagastama küsitud väärtuse teie skriptile. Seda nimetatakse sunnitud sünkroonseks paigutuseks.
Kui see juhtub tsükli sees, viib see katastroofilise jõudlusprobleemini, mida tuntakse kui paigutuse rüselust (Layout Thrashing). Te loete ja kirjutate korduvalt, sundides brauserit ühe kaadri jooksul ikka ja jälle kogu lehte ümber paigutama.
Paigutuse rüseluse näide (mida MITTE teha):
function resizeAllParagraphs() {
const paragraphs = document.querySelectorAll('p');
for (let i = 0; i < paragraphs.length; i++) {
// READ: gets the width of the container (forces layout)
const containerWidth = document.body.offsetWidth;
// WRITE: sets the paragraph's width (invalidates layout)
paragraphs[i].style.width = (containerWidth / 2) + 'px';
}
}
Selles koodis, iga tsükli iteratsiooni sees, loeme offsetWidth
(paigutust käivitav lugemine) ja seejärel kirjutame kohe style.width
(paigutust kehtetuks muutev kirjutamine). See sunnib iga üksiku lõigu puhul ümberpaigutust tegema.
Optimeeritud versioon (lugemiste ja kirjutamiste pakett-töötlus):
function resizeAllParagraphsOptimized() {
const paragraphs = document.querySelectorAll('p');
// First, READ all the values you need
const containerWidth = document.body.offsetWidth;
// Then, WRITE all the changes
for (let i = 0; i < paragraphs.length; i++) {
paragraphs[i].style.width = (containerWidth / 2) + 'px';
}
}
Lihtsalt koodi ümberstruktureerimisega, tehes kõik lugemised esimesena ja seejärel kõik kirjutamised, lubame brauseril operatsioone pakettidena töödelda. See teostab ühe paigutuse arvutuse, et saada algne laius, ja seejärel töötleb kõik stiiliuuendused, mis viib ühe ümberpaigutuseni kaadri lõpus. Jõudluse erinevus võib olla dramaatiline.
Põhilõime blokaad: pikaajalised JavaScripti ülesanded
Brauseri põhilõim on kiire koht. See vastutab JavaScripti käivitamise, kasutaja sisendile reageerimise (klõpsud, kerimised) ja renderdamise torujuhtme käitamise eest. Kuna JavaScript on ühelõimeline, siis kui käivitate keerulise, pikaajalise skripti, blokeerite tegelikult põhilõime. Sel ajal kui teie skript töötab, ei saa brauser midagi muud teha. See ei saa reageerida klõpsudele, töödelda kerimisi ega käivitada animatsioone. Leht muutub täiesti külmunuks ja mittereageerivaks.
Iga ülesannet, mis kestab kauem kui 50 ms, peetakse 'pikaks ülesandeks' ja see võib negatiivselt mõjutada kasutajakogemust, eriti Interaction to Next Paint (INP) Core Web Vital'i näitajat. Levinumad süüdlased on keerukas andmetöötlus, suurte API vastuste käsitlemine või intensiivsed arvutused.
Lahendus on jaotada pikad ülesanded väiksemateks tükkideks ja vahepeal 'loovutada' kontroll põhilõimele. See annab brauserile võimaluse tegeleda muude ootel töödega. Lihtne viis seda teha on setTimeout(callback, 0)
abil, mis ajastab tagasikutse funktsiooni käivitamise tulevases ülesandes, pärast seda, kui brauser on saanud hingetõmbeaega.
Surm tuhande lõikega: liigsed DOM-i manipulatsioonid
Kuigi üksik DOM-i manipulatsioon on kiire, võib tuhandete selliste tegemine olla väga aeglane. Iga kord, kui lisate, eemaldate või muudate elementi elavas DOM-is, riskite käivitada ümberpaigutuse ja ülevärvimise. Kui peate genereerima suure nimekirja elemente ja lisama need lehele ükshaaval, tekitate brauserile palju tarbetut tööd.
Palju jõudsam lähenemine on ehitada oma DOM-struktuur 'võrguühenduseta' ja seejärel lisada see elavasse DOM-i ühe operatsiooniga. DocumentFragment
on kergekaaluline, minimaalne DOM-objekt ilma vanemata. Võite mõelda sellest kui ajutisest konteinerist. Saate lisada kõik oma uued elemendid fragmendile ja seejärel lisada kogu fragmendi DOM-i ühe korraga. See tulemuseks on vaid üks ümberpaigutus/ülevärvimine, olenemata sellest, kui palju elemente te lisasite.
DocumentFragment'i kasutamise näide:
const list = document.getElementById('my-list');
const data = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];
// Create a DocumentFragment
const fragment = document.createDocumentFragment();
data.forEach(itemText => {
const li = document.createElement('li');
li.textContent = itemText;
// Append to the fragment, not the live DOM
fragment.appendChild(li);
});
// Append the entire fragment in one operation
list.appendChild(fragment);
Hakkivad liigutused: ebaefektiivsed JavaScripti animatsioonid
Animatsioonide loomine JavaScriptiga on tavaline, kuid selle ebaefektiivne tegemine viib hakkimise ja 'jõnksatusteni'. Levinud antipattern on setTimeout
või setInterval
kasutamine elementide stiilide uuendamiseks tsüklis.
Probleem on selles, et need taimerid ei ole sünkroniseeritud brauseri renderdustsükliga. Teie skript võib käivituda ja uuendada stiili just pärast seda, kui brauser on kaadri värvimise lõpetanud, sundides seda tegema lisatööd ja potentsiaalselt järgmise kaadri tähtajast mööda minema, mille tulemuseks on vahelejäänud kaader.
Kaasaegne, õige viis JavaScripti animatsioonide teostamiseks on requestAnimationFrame(callback)
abil. See API ütleb brauserile, et soovite teostada animatsiooni ja palub brauseril ajastada akna ülevärvimine järgmise animatsioonikaadri jaoks. Teie tagasikutse funktsioon käivitatakse vahetult enne, kui brauser teostab oma järgmise värvimise, tagades, et teie uuendused on täiuslikult ajastatud ja tõhusad. Brauser saab ka optimeerida, jättes tagasikutse funktsiooni käivitamata, kui leht on taustakaardil.
Lisaks on see, mida te animeerite, sama oluline kui see, kuidas te seda animeerite. Atribuutide nagu width
, height
, top
või left
muutmine käivitab paigutuse etapi, mis on aeglane. Kõige sujuvamate animatsioonide jaoks peaksite kinni pidama atribuutidest, mida saab käsitleda ainult komponeerija, mis tavaliselt töötab GPU-l. Need on peamiselt:
transform
(liigutamiseks, skaleerimiseks, pööramiseks)opacity
(sisse/välja hajutamiseks)
Nende atribuutide animeerimine võimaldab brauseril lihtsalt liigutada või hajutada elemendi olemasolevat värvitud kihti, ilma et oleks vaja uuesti käivitada paigutust või värvimist. See on võti ühtlaste 60 kaadrit sekundis animatsioonide saavutamiseks.
Teooriast praktikasse: tööriistakomplekt jõudluse optimeerimiseks
Teooria mõistmine on esimene samm. Nüüd vaatame mõningaid praktilisi strateegiaid ja tööriistu, mida saate selle teadmise rakendamiseks kasutada.
Skriptide arukas laadimine
See, kuidas te oma JavaScripti laadite, on esimene kaitseliin. Küsige alati, kas skript on esialgseks renderdamiseks tõeliselt kriitiline. Kui ei, kasutage defer
skriptide jaoks, mis vajavad DOM-i, või async
sõltumatute skriptide jaoks. Kaasaegsete rakenduste puhul kasutage tehnikaid nagu koodi tükeldamine (code-splitting) dünaamilise import()
abil, et laadida ainult see JavaScript, mida on vaja praeguse vaate või kasutaja interaktsiooni jaoks. Tööriistad nagu Webpack või Rollup pakuvad ka tree-shaking funktsiooni, et eemaldada kasutamata kood teie lõplikest pakettidest, vähendades failide suurust.
Kõrgsageduslike sündmuste taltsutamine: Debouncing ja Throttling
Mõned brauseri sündmused nagu scroll
, resize
ja mousemove
võivad käivituda sadu kordi sekundis. Kui teil on nendega seotud kulukas sündmusekäsitleja (nt selline, mis teostab DOM-i manipulatsiooni), võite kergesti ummistada põhilõime. Siin on olulised kaks mustrit:
- Throttling (läbilaskvuse piiramine): tagab, et teie funktsioon käivitatakse maksimaalselt üks kord määratud ajavahemiku jooksul. Näiteks 'käivita see funktsioon mitte sagedamini kui kord 200 ms jooksul'. See on kasulik näiteks lõpmatu kerimise käsitlejate jaoks.
- Debouncing (viivitusega käivitamine): tagab, et teie funktsioon käivitatakse alles pärast teatud tegevusetuse perioodi. Näiteks 'käivita see otsingufunktsioon alles siis, kui kasutaja on lõpetanud trükkimise 300 ms jooksul'. See on ideaalne automaatse täitmise otsinguribade jaoks.
Koorma mahalaadimine: sissejuhatus veebitöölistesse (Web Workers)
Tõeliselt raskete, pikaajaliste JavaScripti arvutuste jaoks, mis ei vaja otsest juurdepääsu DOM-ile, on veebitöölised (Web Workers) mängumuutjad. Veebitööline võimaldab teil käivitada skripti eraldi taustalõimel. See vabastab põhilõime täielikult, et see jääks kasutajale reageerivaks. Saate edastada sõnumeid põhilõime ja töölise lõime vahel, et saata andmeid ja saada tulemusi. Kasutusjuhud hõlmavad pilditöötlust, keerulist andmeanalüüsi või taustal andmete hankimist ja vahemällu salvestamist.
Jõudlusdetektiiviks saamine: brauseri arendaja tööriistade kasutamine
Te ei saa optimeerida seda, mida te ei saa mõõta. Jõudluse paneel (Performance panel) kaasaegsetes brauserites nagu Chrome, Edge ja Firefox on teie võimsaim tööriist. Siin on lühike juhend:
- Avage arendaja tööriistad (DevTools) ja minge 'Performance' vahekaardile.
- Klõpsake salvestusnupul ja sooritage oma saidil tegevus, mida kahtlustate aeglaseks (nt kerimine, nupule klõpsamine).
- Peatage salvestamine.
Teile esitatakse detailne leekgraafik (flame chart). Otsige:
- Pikad ülesanded (Long Tasks): need on märgitud punase kolmnurgaga. Need on teie põhilõime blokeerijad. Klõpsake neil, et näha, milline funktsioon viivituse põhjustas.
- Lillad 'Layout' plokid: suur lilla plokk näitab märkimisväärset aega, mis on kulutatud paigutuse etapis.
- Sunnitud sünkroonse paigutuse hoiatused: tööriist hoiatab teid sageli selgesõnaliselt sunnitud ümberpaigutuste eest, näidates teile täpsed koodiread, mis selle eest vastutavad.
- Suured rohelised 'Paint' plokid: need võivad viidata keerukatele värvimisoperatsioonidele, mida saaks optimeerida.
Lisaks on 'Rendering' vahekaardil (sageli peidetud arendaja tööriistade sahtlis) valikud nagu 'Paint Flashing', mis tõstab ekraani alad roheliseks iga kord, kui neid üle värvitakse. See on suurepärane viis ebavajalike ülevärvimiste visuaalseks silumiseks.
Kokkuvõte: kiirema veebi ehitamine, üks kaader korraga
Brauseri renderdamise torujuhe on keeruline, kuid loogiline protsess. Arendajatena on meie JavaScripti kood pidev külaline selles torujuhtmes ja selle käitumine määrab, kas see aitab luua sujuva kogemuse või põhjustab häirivaid kitsaskohti. Mõistes iga etappi – parsimisest komponeerimiseni – saame ülevaate, mida on vaja koodi kirjutamiseks, mis töötab koos brauseriga, mitte selle vastu.
Peamised järeldused on segu teadlikkusest ja tegevusest:
- Austa põhilõime: hoidke see vaba, lükates edasi mittekriitilisi skripte, jaotades pikki ülesandeid ja delegeerides rasket tööd veebitöölistele.
- Vältige paigutuse rüselust: struktureerige oma kood nii, et DOM-i lugemised ja kirjutamised toimuksid pakettidena. See lihtne muudatus võib anda tohutu jõudluse kasvu.
- Olge DOM-iga nutikas: kasutage tehnikaid nagu DocumentFragments, et minimeerida elava DOM-i puudutamise kordi.
- Animeerige tõhusalt: eelistage
requestAnimationFrame
vanematele taimerimeetoditele ja pidage kinni komponeerija-sõbralikest atribuutidest nagutransform
jaopacity
. - Mõõtke alati: kasutage brauseri arendaja tööriistu oma rakenduse profileerimiseks, tegelike kitsaskohtade tuvastamiseks ja oma optimeerimiste valideerimiseks.
Suure jõudlusega veebirakenduste ehitamine ei tähenda enneaegset optimeerimist ega hämarate nippide meeldejätmist. See seisneb fundamentaalselt selle platvormi mõistmises, millele te ehitate. Valdades JavaScripti ja renderdamise torujuhtme vastastikust mõju, annate endale võimu luua kiiremaid, vastupidavamaid ja lõppkokkuvõttes nauditavamaid veebikogemusi kõigile ja kõikjal.