HTML文檔是邊加載邊解析、預解析

HTML文檔加載邊解析

之前一直以為html是加載完之后才由html解析器進行解析的,學習了瀏覽器原理之后,才知道。HTML解析器并不是等整個文檔加載完成之后再解析的,而是網(wǎng)絡進程加載了多少數(shù)據(jù),HTML 解析器便解析多少數(shù)據(jù)。

具體的詳細流程如下:
瀏覽器的網(wǎng)絡進程接收到響應頭之后,會根據(jù)響應頭中的 content-type 字段來判斷文件的類型,比如 content-type 的值是“text/html”,那么瀏覽器就會判斷這是一個 HTML 類型的文件,然后為該請求選擇或者創(chuàng)建一個渲染進程。渲染進程準備好之后,網(wǎng)絡進程和渲染進程之間會建立一個共享數(shù)據(jù)的管道,網(wǎng)絡進程接收到數(shù)據(jù)后就往這個管道里面放,而渲染進程則從管道的另外一端不斷地讀取數(shù)據(jù),并同時將讀取的數(shù)據(jù)“喂”給 HTML 解析器。你可以把這個管道想象成一個“水管”,網(wǎng)絡進程接收到的字節(jié)流像水一樣倒進這個“水管”,而“水管”的另外一端是渲染進程的 HTML 解析器,它會動態(tài)接收字節(jié)流,并將其解析為 DOM。

關于HTML的預解析

一般情況下,html文檔解析時,遇到js腳本就會暫停,等待腳本的下載、執(zhí)行,而下載的也比較依賴網(wǎng)絡環(huán)境、腳本大小等。針對這個情況,Chrome 瀏覽器做了很多優(yōu)化,其中一個主要的優(yōu)化是預解析操作。當渲染引擎收到字節(jié)流之后,會開啟一個預解析線程,用來分析 HTML 文件中包含的 JavaScript、CSS 等相關文件,解析到相關文件之后,預解析線程會提前下載這些文件。

原文

極客時間-瀏覽器工作原理與實踐

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容