Sto cercando di capire quando esattamente l'HTML viene visualizzato sullo schermo nel browser.Browser diverso comportamento di rendering con diversa posizione di script e tag di collegamento
ho letto this S.O. risposta e provato alcuni casi d'uso e ho osservato qualcosa che non rientra nel modello condiviso nel link,
anche io non può sembrare trovare una mente modello coerente per l'osservazione.
Qual è l'ordine di rendering del browser che si adatta ai casi discussi?
- Quando parser HTML raggiunge M1, viene visualizzato M1.
- Quindi il parser raggiunge il tag di script attende il file js da scaricare e analizzato.
- Quindi il parser raggiunge M3, viene visualizzato M3.
Caso A è in-coerenza con l'ordine descritto sulla maggior parte delle risposte. Huray !!! Andiamo avanti.
- parser HTML raggiunge M1, M1 non viene visualizzato come nel caso un
- parser HTML raggiunge collegamento tag, attendere per i CSS da scaricare e parser.
- M1 e M2 sono visualizzati, quindi ha aspettato il download del foglio di stile prima di visualizzare M1.
- Quindi il parser raggiunge il tag di script attende il file js da scaricare e analizzato.
- Quindi il parser raggiunge M3, viene visualizzato M3.
Quindi Case-B mostra che non ha eseguito il rendering della M1, ha aspettato il download del CSS prima di renderlo. Quindi forse il renderer deve conoscere il CSS prima del rendering.
Caso: CImmagine C
Così da Case B, si presume che possa essere il rendering-er ha bisogno di sapere CSS. sguardo
Let a causa C:
- parser HTML raggiunge M1, viene visualizzato M1. Non dovrebbe essere stato visualizzato poiché, come abbiamo visto nel caso B, dovrebbe aspettare che css carichi.
- Ora il parser raggiunge lo script, attende il download e il parser di js.
- vengono visualizzati M2, M3
Edit: Proposto mente modello che spiega il comportamento sopra .. (ma richiedono una revisione/affinamento)
Script
non è un tag di blocco del renderinglink
è un tag di blocco del rendering- Considerando che il renderizzatore e parser HTML sono due thread.
- Il parser HTML può inviare informazioni al renderer per il rendering.
- Il parser HTML può inviare un segnale di blocco al renderer ... per bloccare il renderer per rendere qualsiasi html che non è stato reso almeno una volta.
- Il parser HTML può inviare un segnale di sblocco al renderer per sbloccare il renderer dal rendering di qualsiasi html che non è stato visualizzato una sola volta.
Con il modello di cui sopra può spiegare CASO B e C:
CASO B Spiegazione:
- parser HTML raggiunge M1, M1 è inviare al renderer.
- Il parser HTML raggiunge il tag di collegamento, il parser invia un segnale di blocco al programma di rendering.
- Renderer prima che possa eseguire il rendering di M1, ha ricevuto un segnale di blocco e quindi M1 non viene visualizzato.
- Il parser HTML completa l'analisi del tag di collegamento (download) e invia un segnale di sblocco al renderer, dopo aver ricevuto un segnale di sblocco rende la M1.
- Il parser HTML raggiunge M2, M2 viene inviato al renderer.
- Il parser HTML raggiunge il tag Script, poiché il tag di script non è un tag di blocco del renderer, il renderer è libero di eseguire il rendering di html.
- Il parser HTML completa l'analisi del tag script (download).
- Il parser HTML raggiunge M3, M3 viene inviato al renderer.
Analogamente, è possibile eseguire il funzionamento a secco CASE C e si adatta perfettamente al modello precedente.
Il mio modello è corretto o qualcosa di sbagliato?
Questo può aiutare: - https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery – user1673567
il link è buono .. ma non spiega il comportamento contraddittorio nel caso B e C .. – Bhuvan