Uurige, kuidas brauserid renderdamist olemuslike suuruste arvutamise vahemälu abil optimeerivad. Õppige vähendama paigutuse loksumist, parandama Core Web Vitals'i näitajaid ja kirjutama kiiremat CSS-i.
Veebi jõudluse avamine: süvauurimine CSS-i olemuslike suuruste arvutamise vahemällu
Globaalses digitaalmajanduses ei ole veebi jõudlus luksus, vaid fundamentaalne nõue. Kasutajad maailma igast nurgast ootavad kiiret, sujuvat ja stabiilset veebikogemust. Aeglaselt laadiv leht või häiriv paigutuse muutus võib tähendada uue kliendi võitmist või võimaluse kaotamist. Kuigi arendajad keskenduvad sageli võrgu optimeerimisele ja JavaScripti käivitamisele, toimub võimas, kuid sageli tähelepanuta jäetud optimeerimine sügaval brauseri renderdusmootoris: Olemuslike suuruste arvutamise vahemälu.
See sisemine mehhanism on vaikne kangelane jõudluse parandamisel, mängides olulist rolli selles, kui kiiresti ja tõhusalt brauser lehte renderdada suudab. Selle toimimise mõistmine võimaldab veebiarendajatel kirjutada CSS-i ja HTML-i, mis on kooskõlas brauseri optimeerimisstrateegiatega, mis toob kaasa olulisi parandusi peamistes mõõdikutes, nagu Core Web Vitals (CWV). See artikkel viib teid süvitsi sellesse vahemälumehhanismi, selgitades, mis see on, miks see oluline on ja kuidas saate kirjutada koodi, mis kasutab ära selle täielikku potentsiaali.
Sissejuhatus brauseri renderdamise konveierisse
Enne kui me saame vahemälu väärtustada, vajame põhiarusaama sellest, kuidas brauser muudab koodi piksliteks. Protsess, mida sageli nimetatakse kriitiliseks renderdamise teeks, hõlmab mitmeid peamisi etappe. Kuigi täpne terminoloogia võib brauserimootorite (nagu Blink, Gecko ja WebKit) puhul erineda, on üldine voog sarnane:
- DOM (Document Object Model) loomine: Brauser parseldab HTML-i dokumendi esindavate sõlmede puulaadseks struktuuriks.
- CSSOM (CSS Object Model) loomine: Brauser parseldab CSS-i, sealhulgas välised stiililehed ja inline-stiilid, stiilide puuks.
- Renderduspuu moodustamine: DOM ja CSSOM kombineeritakse renderduspuu moodustamiseks. See puu sisaldab ainult sõlmi, mis kuvatakse lehel visuaalselt (nt elemendid, millel on `display: none`, jäetakse välja).
- Paigutus (või ümberarvutus): See on meie teema jaoks oluline etapp. Brauser arvutab välja iga renderduspuu sõlme täpse suuruse ja positsiooni. See määrab iga elemendi geomeetria – kust see algab, kui lai see on, kui kõrge see on. See on arvutuslikult intensiivne protsess, kuna elemendi suurust võivad mõjutada selle vanem, lapsed ja õed-vennad.
- Värvimine: Brauser täidab iga elemendi pikslid vastavalt arvutatud geomeetriale ja stiilidele – värvid, ääred, varjud jne. See hõlmab joonistamiskäskude loendi loomist.
- Kompositsioon: Brauser joonistab erinevad värvitud kihid ekraanile õiges järjekorras, et luua lõplik pilt.
Paigutuse etapp on kurikuulus jõudluse kitsaskoht. Üksik muudatus elemendi geomeetrias võib käivitada ahelreaktsiooni, sundides brauserit ümber arvutama suure osa lehe või isegi kogu dokumendi paigutust. Siin muutub olemusliku suuruse mõistmine ülimalt tähtsaks.
Mis on olemuslik suurus? Elemendi loomulike mõõtmete demüstifitseerimine
CSS-i maailmas saab elemendi suurust määrata kahel peamisel viisil: ekstrinsiliselt või intrinsiliselt.
Ekstrinsiline suuruse määramine
See on siis, kui teie, arendaja, määratlete elemendi suuruse selgesõnaliselt CSS-i abil. Suurus kehtestatakse väljastpoolt selle konteksti või otseste stiilide kaudu.
Näited:
div { width: 500px; height: 250px; }- Fikseeritud suurus.div { width: 100%; }- Suuruse määrab selle vanemkonteineri laius.div { width: 50vw; }- Suuruse määrab vaateava laius.
Intrinsiline suuruse määramine
See on elemendi loomulik, sisupõhine suurus. See on suurus, mille element võtaks, kui väliseid piiranguid ei rakendataks. Suurus tuleb seestpoolt.
Näited:
- Elemendi
<img>olemuslik suurus on pildifaili tegelik laius ja kõrgus (nt 1200x800 pikslit fotot). - Elemendi
<span>Tere maailm</span>olemusliku suuruse määravad tekstisisu, `font-size`, `font-family`, `letter-spacing` ja muud tüpograafilised omadused. - Elemendi
<video>olemuslik suurus on videoriba mõõde. - Nupu olemuslik suurus sõltub selle tekstisildist, polsterdusest ja äärisest.
Olemusliku suuruse arvutamine võib olla üllatavalt kulukas. Pildi puhul võib brauseril olla vaja dekodeerida osa failist, et lugeda selle metaandmeid. Teksti puhul hõlmab see keerulisi arvutusi, mis on seotud fondi mõõdikute ja tähemärkide kujundamisega. Kui brauser teostab paigutuse, peab ta sageli teadma elemendi olemuslikku suurust, et õigesti suurustada selle vanemat või positsioneerida selle õed-vennad. Selle korduvalt tegemine iga elemendi jaoks igal paigutuse muudatusel oleks uskumatult aeglane.
Meie loo kangelane: olemuslike suuruste arvutamise vahemälu
Et vältida pideva ümberarvutamise jõudluse kahju, kasutavad brauserimootorid nutikat optimeerimist: Olemuslike suuruste arvutamise vahemälu. See on lihtne, kuid võimas kontseptsioon:
- Arvuta üks kord: Esimene kord, kui brauser peab määrama elemendi olemusliku suuruse, teostab ta täieliku, potentsiaalselt kalli arvutuse.
- Salvesta tulemus: Seejärel salvestab brauser selle arvutatud suuruse sisemisse vahemällu, mis on selle elemendiga seotud.
- Kasuta sageli uuesti: Järgnevatel paigutustel, kui brauser vajab uuesti sama elemendi olemuslikku suurust, ei arvuta ta seda ümber. Ta lihtsalt toob väärtuse vahemälust. See on suurusjärkude võrra kiirem.
See vahemälu on kriitiline optimeerimine, mis muudab kaasaegsed, dünaamilised veebilehed teostatavaks. Kuid nagu igal vahemälul, on sellel eluaeg ja seda saab tühistada. Brauser on piisavalt nutikas, et teada, millal vahemällu salvestatud väärtus enam ei kehti.
Mis käivitab vahemälu tühistamise?
Brauser peab elemendi vahemällu salvestatud olemusliku suuruse tühistama iga kord, kui toimub muudatus, mis võib mõjutada selle loomulikke mõõtmeid. Levinud käivitajad on järgmised:
- Sisu muudatused: Teksti muutmine elemendi
<div>sees, elemendi<img>atribuudisrcmuutmine või laste lisamine konteinerisse tühistab vahemälu. - CSS-i atribuutide muudatused: CSS-i atribuutide muutmine, mis otseselt mõjutavad olemuslikku suurust, sunnib ümberarvutust. Tekstielemendi puhul võib see olla
font-size,font-weight,letter-spacingvõiwhite-space. - Atribuutide muudatused: Sisu määratlevate atribuutide muutmine, nagu sisendi
valuevõi<textarea>elemendicolsjarows.
Kui vahemälu tühistatakse, on brauser sunnitud järgmise paigutuse käigus uuesti tegema kalli arvutuse. Sagedased tühistamised võivad eitada vahemälu eeliseid ja põhjustada jõudlusprobleeme.
Praktilised mõjud ja jõudluse suurenemine
Selle vahemälumehhanismi mõistmine ei ole lihtsalt akadeemiline harjutus. Sellel on otsene mõju jõudlusnäitajatele, mis on kõige olulisemad kasutajatele ja otsingumootoritele.
Paigutuse loksumise vähendamine
Paigutuse loksumine on tõsine jõudlusevastane muster. See tekib siis, kui JavaScript korduvalt ja sünkroonselt loeb ja kirjutab omadusi, mis mõjutavad elemendi geomeetriat. Mõelge sellele stsenaariumile:
// HALB: Põhjustab paigutuse loksumist
function resizeElements(elements) {
for (let i = 0; i < elements.length; i++) {
// LOE: See sunnib brauserit teostama paigutust, et saada täpne laius.
const currentWidth = elements[i].offsetWidth;
// KIRJUTA: See tĂĽhistab paigutuse, kuna laius muutub.
elements[i].style.width = (currentWidth / 2) + 'px';
}
}
Selles tsüklis on brauser kinni valusas tsüklis: loe (käivita paigutus) -> kirjuta (tühista paigutus) -> loe (käivita paigutus) -> kirjuta (tühista paigutus). Olemusliku suuruse vahemälu võib mõnikord aidata, pakkudes lugemisosale kiiret vastust, kuid pidev tühistamine sunnib paigutusmootorit siiski tegema tarbetut tööd.
Core Web Vitals (CWV) parandamine
Olemusliku suuruse kontseptsioon on sügavalt seotud Google'i Core Web Vitals'iga, mis on mõõdikute komplekt, mis mõõdab reaalset kasutuskogemust.
- Kumulatiivne paigutuse nihe (CLS): See on kõige otsesem seos. CLS mõõdab visuaalset stabiilsust. Kõrge CLS-i skoor juhtub sageli siis, kui brauser ei tea elemendi olemuslikku suurust enne selle renderdamist. Klassikaline näide on pilt ilma mõõtmeteta. Brauser reserveerib sellele null ruumi. Kui pildifail lõpuks alla laaditakse ja brauser avastab selle olemusliku suuruse, hüppab see oma kohale, nihutades kogu ümbritsevat sisu. Suuruse teabe ette andmisega aitame brauseril seda nihet vältida.
- Suurim sisuline värvimine (LCP): See mõõdab laadimisjõudlust. Kui brauser kulutab liiga palju aega paigutusetapis, kuna ta arvutab pidevalt suurusi ümber, võib ekraanil oleva suurima elemendi värvimine edasi lükkuda, halvendades LCP-skoori.
- Interaktsioon järgmise värvimiseni (INP): See mõõdab reageerimisvõimet. Pikad paigutusülesanded blokeerivad brauseri peamist lõime. Kui kasutaja proovib lehega suhelda (nt klõpsata nupul), kui brauser on hõivatud raske paigutusarvutusega, viibib vastus, mis viib halva INP-skoorini. Olemusliku suuruse vahemälu tõhus kasutamine vähendab peamise lõime tööd ja parandab reageerimisvõimet.
Kuidas arendajad saavad vahemälu ära kasutada (või takistada)
Arendajana ei saa te olemusliku suuruse vahemälu otse juhtida. Kuid saate kirjutada HTML-i ja CSS-i, mis töötab koos selle optimeerimisega, mitte selle vastu. See seisneb brauseri varustamises võimalikult suure hulga teabega võimalikult varakult ja vältimises mustreid, mis põhjustavad tarbetuid vahemälu tühistamisi.
"Tee nii": parimad tavad terve vahemälu jaoks
1. Esitage meediale selgesõnalised mõõtmed
See on kõige kriitilisem tava CLS-i vältimiseks ja brauseri paigutusmootori abistamiseks. Esitage alati oma elementidele <img> ja <video> atribuudid width ja height.
<!-- HEA -->
<img src="path/to/image.jpg" width="1200" height="800" alt="...">
Kaasaegsed brauserid on nutikad. Nad kasutavad neid atribuute, et arvutada enne pildi laadimist olemuslik kuvasuhe (1200 / 800 = 1,5). Koos CSS-i `height: auto;` abil võimaldab see brauseril reserveerida õige koguse vertikaalset ruumi, kõrvaldades täielikult paigutuse nihke, kui pilt ilmub.
2. Kasutage CSS-i atribuuti `aspect-ratio`
Atribuut `aspect-ratio` on kaasaegne ja võimas tööriist, et selgesõnaliselt öelda brauserile elemendi olemuslik suhe. See on fantastiline responsiivseks disainiks ja töötab rohkemate kui ainult piltidega.
.responsive-iframe-container {
width: 100%;
aspect-ratio: 16 / 9; /* Räägib brauserile olemusliku suhte */
}
.responsive-iframe-container iframe {
width: 100%;
height: 100%;
}
See kood reserveerib konteinerile 16:9 ruumiploki, tagades, et kui iframe'i sisu laaditakse, jääb lehe paigutus stabiilseks.
3. Eraldage alampuud CSS-i atribuudiga `contain`
Atribuut `contain` on brauserile suure jõudlusega vihje. See võimaldab teil deklareerida, et element ja selle sisu on nii palju kui võimalik ülejäänud dokumendipuust sõltumatud. Meie jaoks on kõige olulisem väärtus `size`.
contain: size; ütleb brauserile, et elemendi suurus ei sõltu selle laste suurusest. See võimaldab brauseril jätta laste paigutuse vahele, kui tal on vaja arvutada ainult konteineri suurus. Näiteks kui teil on keeruline, iseseisev vidin, saate rakendada `contain: size;` (või sagedamini `contain: content;`, mis hõlmab ka `layout` ja `paint` sisaldust), et vältida selle põhjustamist peamise dokumendi paigutuse kallite ümberarvutuste tegemist.
.complex-widget {
contain: content;
/* Sa pead esitama selgesõnalise suuruse, et contain:size töötaks */
width: 300px;
height: 500px;
}
4. Rühmitage DOM-i värskendused JavaScriptis
Paigutuse loksumise vältimiseks rühmitage oma lugemised ja kirjutamised. Esiteks lugege kõik vajalikud väärtused DOM-ist. Seejärel teostage kõik oma kirjutamised.
// HEA: RĂĽhmitatud lugemised ja kirjutamised
function resizeElements(elements) {
// 1. LOE faas
const newWidths = [];
for (let i = 0; i < elements.length; i++) {
newWidths.push(elements[i].offsetWidth / 2);
}
// 2. KIRJUTA faas
for (let i = 0; i < elements.length; i++) {
elements[i].style.width = newWidths[i] + 'px';
}
}
See muster võimaldab brauseril teostada ühe paigutusarvutuse, et saada kõik laiused, ja seejärel töödelda kõiki stiilimuudatusi, mis võivad käivitada ainult ühe lõpliku ümberarvutuse operatsiooni lõpus.
"Ära tee": tavad, mis tühistavad vahemälu ja kahjustavad jõudlust
1. Paigutust tekitavate omaduste animeerimine
Üks levinumaid jõudlusvigu on elemendi geomeetriat mõjutavate omaduste animeerimine. Omadused, nagu width, height, margin, padding, top ja left, käivitavad kõik renderdamise konveieri paigutusetapi. Nende animeerimine sunnib brauserit käitama paigutusarvutusi igal üksikul kaadril.
Selle asemel animeerige omadusi, mida saab käsitseda komposiitor: `transform` ja `opacity`. Need omadused ei käivita paigutust. Brauser saab sageli animeerimise GPU-sse üle kanda, mille tulemuseks on siidiselt siledad 60 kaadrit sekundis animatsioonid, mis ei blokeeri peamist lõime.
/* HALB: Animeerib paigutust */
.box.animate {
animation: move-bad 2s infinite;
}
@keyframes move-bad {
from { left: 0; }
to { left: 200px; }
}
/* HEA: Animeerib komposiitoris */
.box.animate {
animation: move-good 2s infinite;
}
@keyframes move-good {
from { transform: translateX(0); }
to { transform: translateX(200px); }
}
2. Sagedased ja tarbetud sisu muudatused
Kui teil on komponent, mida värskendatakse sageli (nt taimer, aktsiate ticker), olge teadlik sellest, kuidas need värskendused paigutust mõjutavad. Kui numbri muutmine "10"-st "9"-ks põhjustab konteineri suuruse muutmist, tühistate korduvalt olemusliku suuruse vahemälu ja käivitate paigutusarvutusi. Võimaluse korral proovige tagada, et konteineri suurus jääb nende värskenduste ajal stabiilseks, näiteks kasutades monolaiusega fonti või määrates minimaalse laiuse.
Piilumine katte all: brauseri arendustööriistad
Nende optimeerimiste (ja vastumustrite) mõju näete oma brauseri arendustööriistade abil.
Jõudluse paneeli kasutamine
Chrome DevToolsis on jõudluse paneel teie parim sõber. Saate salvestada jõudlusprofiili animatsiooni või skripti käivitamise ajal.
- Paigutuse loksumine: Otsige pikki, korduvaid lillasid ribasid, millel on silt "Paigutus". Kui näete sunnitud ümberarvutuse hoiatust (väike punane kolmnurk), on see selge märk paigutuse loksumisest.
- Animatsiooni jõudlus: Salvestage "halb" `left` animatsioon ja "hea" `transform` animatsioon. `left` animatsiooni profiilis näete igal kaadril Layout ja Paint ülesannete seeriat. `transform` animatsiooni profiilis on peamine lõim enamasti jõude ja töö toimub "Compositor" lõimes.
Paigutuse nihkete visualiseerimine
DevToolsi renderdamise vahekaardil (võimalik, et peate selle lubama kolme punkti menüüst > Rohkem tööriistu > Renderdamine) saate märkida ruudu "Paigutuse nihke piirkonnad". See tõstab esile ekraani alad sinisega iga kord, kui toimub paigutuse nihe. See on hindamatu tööriist CLS-i probleemide silumiseks, mis on sageli põhjustatud sellest, et brauser ei tea elemendi olemuslikku suurust ette.
Tulevik: arenevad brauseri optimeerimised
Brauserimüüjad töötavad pidevalt selle nimel, et renderdamine oleks kiirem ja intelligentsem. Projektid, nagu Chromiumi RenderingNG (Next Generation), kujutavad endast renderdusmootori põhjalikku ümberarhitektuuri, et see oleks usaldusväärsem, suurema jõudlusega ja prognoositavam. Funktsioonid, nagu atribuut `contain`, on osa laiemast suundumusest, mis annab arendajatele selgesõnalisemaid tööriistu, et edastada oma kavatsusi brauserimootorile.
Mida rohkem me veebiarendajatena neid alusmehhanisme mõistame, seda paremini oleme valmis ehitama rakendusi, mis pole mitte ainult funktsionaalsed, vaid ka tõeliselt jõudlusega globaalses mastaabis, pakkudes kõigile kasutajatele suurepärase kogemuse, olenemata nende seadmest või võrgutingimustest.
Järeldus
CSS-i olemuslike suuruste arvutamise vahemälu on võimas, kulisside taga toimuv optimeerimine, mis muudab kaasaegse veebi võimalikuks. Kuigi see töötab automaatselt, võivad meie kodeerimispraktikad kas aidata või takistada selle tõhusust.
Neid peamisi järeldusi sisestades saate kirjutada suurema jõudlusega ja professionaalsemat veebikoodi:
- Paigutus on kallis: Olge alati teadlik toimingutest, mis käivitavad paigutusarvutusi.
- Esitage suuruse teave ette: Kasutage meedias atribuute `width`/`height` ja atribuuti `aspect-ratio`, et vältida paigutuse nihkeid ja aidata brauseril oma paigutust tõhusalt planeerida.
- Animeerige nutikalt: Eelistage animeerida `transform` ja `opacity` üle omaduste, mis mõjutavad geomeetriat, et vältida kalleid kaadri kohta paigutus- ja värvimistöid.
- Isoleerige keerukus: Kasutage CSS-i atribuuti `contain`, et anda brauserile vihjeid selle kohta, millised teie paigutuse osad on iseseisvad, võimaldades paremini suunatud optimeerimisi.
- Auditeerige oma koodi: Kasutage brauseri arendustööriistu, et leida sunnitud ümberarvutusi, paigutuse loksumist ja tarbetuid paigutuse nihkeid.
Luues vaimse mudeli selle kohta, kuidas brauser suurust ja paigutust käsitleb, liigute lihtsalt töötava CSS-i kirjutamisest veebikogemuste kavandamiseni, mis on kiired, stabiilsed ja nauditavad ülemaailmsele publikule.