Skärmen som ritas är inte magisk
När jag började utveckla frontend (Vue.js) tänkte jag på webbläsaren som bara en ”ram för att visa kod.” Det var naturligt att om du använde Men mina tankar förändrades när jag i praktiken upplevde animeringens stamning eller skärmens ryck när jag rullade (jank). ”Varför fungerar samma kod smidigt i Chrome men kraschar i Internet Explorer (IE)?” ”Varför skjuter min CPU i höjden när jag ändrar stilen bara lite med JavaScript?” Det visar sig att webbläsaren inte bara är en bildram. Webbläsaren var en enorm ’målare’ och ’arkitekt’ som tolkade texten (HTML/CSS) vi skickade, beräknade matematiskt varje pixel och skrev ut den. Förra gången levererade vi data säkert via tuffa nätverksvägar. Den här gången ska vi öppna datarutan (paketet) som kom och ta reda på hur webbläsaren ritar en bild som kallas skärmen. Det här är den sista historien i Re: Booting CS Basics-serien. I vårt ’digitala logistikcenter’ världsbild har produkten (HTML-fil) nu anlänt till kundens hem (webbläsare). Det som kom var dock inte en färdig produkt, utan en ‘monteringsmanual’. Arbetslaget som kallas webbläsarmotorn (renderingsmotorn) läser denna manual och börjar omedelbart monteringen. Denna process kallas renderingspipeline. Läser HTML-texten som kommer först och skapar ett ’skelett’. Läs sedan CSS-filen och skapa ”stilregler”. Nu kombinerar vi skelettet (DOM) och design (CSSOM). Den viktiga punkten här är att endast ”saker som faktiskt kommer att visas på skärmen” väljs. Nu är det verkligen viktiga steget. Nyckeln till prestandaoptimering ligger här. När renderingsträdet har skapats utför webbläsaren två tunga uppgifter. Låt oss känna skillnaden i kostnad med koden. Analys: I praktiken uppstår de flesta fall av ”stamningsanimering” eftersom layoutegenskaper som Jag visste inte detta när jag gick på college, så jag manipulerade DOM slumpmässigt med JavaScript. Genom att gå igenom Tips för att säkerställa prestanda: Med den här artikeln har [Re: Booting] CS Basics-serien tagit slut. Vi åkte på en lång resa tillsammans. Först var det bara kunskap som jag memorerade för att få ett jobb. Men efter att ha stött på fel i praktiken och tittat igen var CS (datateknik) inte en död bokstav, utan en fast grund som stödde min kod. Grundarbetet är nu klart. Det är dags att bygga ditt eget slott på fast mark. I nästa serie [Monolith Builder] kommer jag att täcka att bygga webbapplikationer med Spring Boot och Vue.js, som jag har upplevt i praktiken. Se fram emot processen att omvandla ”teori” till ”praktik”.färg: röd skulle den bli röd.

Lasten anlände, monteringen börjar
Steg 1: Ritningsanalys (Parsing & DOM Tree)
<html> är roten (Root), <body> är stammen, <div> är grenarna…Steg 2: Inredning (CSSOM-träd)
div är röda”, ”Den som har klassen box får storleken 100px”Steg 3: Skapa en arbetsorder (Render Tree)
display: none? Det kommer inte att synas på skärmen, så det utesluts från renderingsträdet. (Det tar inte heller någon plats)visibility: hidden då? Elementet syns inte men tar ändå plats, så det ingår i renderingsträdet.
[Kodverifiering] Reflow och repaint
const box = document.getElementById('box');
// Case 1: Kod som utloser layout (Reflow) (dyrt!)
// Om storlek eller position andras maste kringliggande element rakna om.
box.style.width = '200px';
box.style.height = '200px';
box.style.margin = '20px';
// Case 2: Kod som bara utloser paint (Repaint) (relativt billigt)
// Position oforandrad, bara fargen andras. Ingen omrakning, bara ommalning.
box.style.backgroundColor = 'blue';
box.style.color = 'white';
box.style.visibility = 'hidden';
width: Det är ett bygge som ändrar själva byggnadens storlek. Grannhuset knuffas undan, och huset bredvid det också. Webbläsaren måste ta fram miniräknaren och räkna om allt. (Reflow uppstår -> huvudboven bakom sämre prestanda)color: Byggnadens storlek lämnas som den är, bara fasaden målas om. Ingenting behöver räknas om. (Repaint uppstår -> snabbt)width, left och top berörs i realtid. I det här fallet behövs en teknik för att hoppa över layoutberäkningen genom att använda egenskaper som transform.Praktiska råd: Mobba inte din webbläsare
for-satsen ändrade jag storleken och stilen för varje element. Ur webbläsarens perspektiv är det som att bli torterad genom att förstöra och bygga om en byggnad dussintals gånger per sekund.
class i förväg och byt bara className en enda gång.transform: translate() i stället för left och top hoppar webbläsaren över layoutsteget och GPU:n tar hand om resten.display: none (utesluts från renderingsträdet); ska bara platsen stå tom, använd visibility: hidden (ingår i renderingsträdet). Håll isär dem.
Avslutning av serie 1: Min CS startade om


