Il disegno dello schermo non è magia
Quando ho iniziato a sviluppare front-end (Vue.js), ho pensato al browser semplicemente come a un “frame per la visualizzazione del codice”. Era naturale che se avessi usato Tuttavia, i miei pensieri sono cambiati quando ho sperimentato nella pratica lo stuttering dell’animazione o lo scatto dello schermo durante lo scorrimento (jank). “Perché lo stesso codice funziona correttamente in Chrome ma si blocca in Internet Explorer (IE)?” “Perché la mia CPU va alle stelle quando cambio leggermente lo stile con JavaScript?” Si scopre che il browser non è solo una cornice. Il browser era un enorme “pittore” e “architetto” che interpretava il testo (HTML/CSS) che inviavamo, calcolava matematicamente ogni pixel e lo stampava. L’ultima volta abbiamo trasmesso i dati in tutta sicurezza attraverso strade di rete accidentate. Questa volta apriamo la casella dati (pacchetto) che è arrivata e scopriamo come il browser disegna un’immagine chiamata schermo. Questa è l’ultima storia della serie Re: Booting CS Basics. Nella nostra visione del mondo da “centro logistico digitale”, il prodotto (file HTML) è ora arrivato a casa del cliente (browser). Ciò che è arrivato però non è stato un prodotto finito, ma un “manuale di montaggio”. Il gruppo di lavoro chiamato motore del browser (motore di rendering) legge questo manuale e inizia immediatamente l’assemblaggio. Questo processo è chiamato pipeline di rendering. Legge il testo HTML che arriva per primo e crea uno ‘scheletro’. Quindi, leggi il file CSS e crea le “regole di stile”. Ora combiniamo lo scheletro (DOM) e il design (CSSOM). Il punto importante qui è che vengono selezionate solo le “cose che appariranno effettivamente sullo schermo”. Ora arriva il passo veramente importante. La chiave per l’ottimizzazione delle prestazioni sta qui. Una volta creato l’albero di rendering, il browser esegue due compiti pesanti. Sentiamo la differenza di costo con il codice. Analisi: In pratica, la maggior parte dei casi di “animazione stuttering” si verificano perché le proprietà del layout come Non lo sapevo quando ero al college, quindi ho manipolato in modo casuale il DOM con JavaScript. Eseguendo l’istruzione Suggerimenti per garantire le prestazioni: Con questo articolo si conclude la [Re: Booting] CS Basics Series. Abbiamo fatto un lungo viaggio insieme. All’inizio era solo una conoscenza che memorizzavo per trovare un lavoro. Tuttavia, dopo aver riscontrato errori nella pratica e aver analizzato di nuovo, CS (ingegneria informatica) non era una lettera morta, ma un terreno solido che supportava il mio codice. Il lavoro di fondazione è ora completo. È tempo di costruire il tuo castello su un terreno solido. Nella prossima serie [Monolith Builder], tratterò della creazione di applicazioni web utilizzando Spring Boot e Vue.js, che ho sperimentato nella pratica. Attendo con ansia il processo di trasformazione della “teoria” in “pratica”.color: red, sarebbe diventato rosso.

Il carico è arrivato, inizia il montaggio
Passaggio 1: analisi del progetto (parsing e albero DOM)
<html> è la radice (Root), <body> il tronco, <div> i rami…Passaggio 2: progettazione degli interni (albero CSSOM)
div in rosso”, “Quello con classe box misura 100px”Passaggio 3: crea un ordine di lavoro (albero di rendering)
display: none? Dato che non saranno visibili sullo schermo, vengono esclusi dall’albero di rendering. (Non occupano nemmeno spazio)visibility: hidden? Non si vede, ma occupa spazio, quindi viene incluso nell’albero di rendering.
[Verifica del codice] Reflow e repaint
const box = document.getElementById('box');
// Case 1: Codice che provoca layout (Reflow) (costoso!)
// Se cambia dimensione o posizione, vanno ricalcolati anche gli elementi vicini.
box.style.width = '200px';
box.style.height = '200px';
box.style.margin = '20px';
// Case 2: Codice che provoca solo paint (Repaint) (relativamente economico)
// Posizione uguale, cambia solo il colore. Niente ricalcolo, solo riverniciatura.
box.style.backgroundColor = 'blue';
box.style.color = 'white';
box.style.visibility = 'hidden';
width: è un intervento che cambia le dimensioni dell’edificio. L’edificio accanto viene spinto via, e poi anche quello dopo. Il browser deve rifare tutti i calcoli da capo. (Si verifica un Reflow -> principale causa del calo di prestazioni)color: le dimensioni dell’edificio restano invariate, si ridipinge soltanto. Non c’è nulla da ricalcolare. (Si verifica un Repaint -> veloce)width, left e top vengono toccate in tempo reale. In questo caso, è necessaria una tecnica per saltare il calcolo del layout utilizzando proprietà come transform.Consigli pratici: non maltrattare il tuo browser
for, ho modificato la dimensione e lo stile di ciascun elemento. Dal punto di vista del browser, è come essere torturati distruggendo e ricostruendo un edificio decine di volte al secondo.
class e cambia soltanto il className, una volta sola.left e top usi transform: translate(), la fase di layout viene saltata e se ne occupa la GPU.display: none (escluso dall’albero di rendering), se vuoi solo lasciare vuoto il suo posto usa visibility: hidden (incluso nell’albero di rendering). Tieni distinti i due casi.
Chiudendo la serie 1: il mio CS è stato riavviato


