亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

瀏覽器解析渲染HTML文檔的過(guò)程

CoyPan / 2384人閱讀

摘要:瀏覽器的預(yù)解析可以減緩渲染被阻塞的情況,例如文檔解析過(guò)程中預(yù)加載器發(fā)現(xiàn)了標(biāo)簽,會(huì)對(duì)文件進(jìn)行加載并放在瀏覽器緩存中,這樣當(dāng)解析器遇到這個(gè)標(biāo)記時(shí),由于預(yù)加載器已經(jīng)將文件加載下來(lái)了,所以會(huì)被立即執(zhí)行,不需要等待從網(wǎng)絡(luò)抓取資源,減緩了對(duì)渲染的阻塞。

參考資料

瀏覽器的工作原理

瀏覽器加載網(wǎng)頁(yè)時(shí)的過(guò)程是什么?

HTML渲染過(guò)程詳解

瀏覽器的工作原理 一、瀏覽器的高層結(jié)構(gòu)

瀏覽器的主要組件為:

用戶界面 - 包括地址欄、前進(jìn)/后退按鈕、書(shū)簽菜單等。除了瀏覽器主窗口顯示的您請(qǐng)求的頁(yè)面外,其他顯示的各個(gè)部分都屬于用戶界面。

瀏覽器引擎 - 在用戶界面和呈現(xiàn)引擎之間傳送指令。

呈現(xiàn)引擎 - 負(fù)責(zé)顯示請(qǐng)求的內(nèi)容。如果請(qǐng)求的內(nèi)容是 HTML,它就負(fù)責(zé)解析 HTML 和 CSS 內(nèi)容,并將解析后的內(nèi)容顯示在屏幕上。

網(wǎng)絡(luò) - 用于網(wǎng)絡(luò)調(diào)用,比如 HTTP 請(qǐng)求。其接口與平臺(tái)無(wú)關(guān),并為所有平臺(tái)提供底層實(shí)現(xiàn)。

用戶界面后端 - 用于繪制基本的窗口小部件,比如組合框和窗口。其公開(kāi)了與平臺(tái)無(wú)關(guān)的通用接口,而在底層使用操作系統(tǒng)的用戶界面方法。

JavaScript 解釋器。用于解析和執(zhí)行 JavaScript 代碼。

數(shù)據(jù)存儲(chǔ)。這是持久層。瀏覽器需要在硬盤(pán)上保存各種數(shù)據(jù),例如 Cookie。新的 HTML 規(guī)范 (HTML5) 定義了“網(wǎng)絡(luò)數(shù)據(jù)庫(kù)”,這是一個(gè)完整(但是輕便)的瀏覽器內(nèi)數(shù)據(jù)庫(kù)。

值得注意的是,和大多數(shù)瀏覽器不同,Chrome 瀏覽器的每個(gè)標(biāo)簽頁(yè)都分別對(duì)應(yīng)一個(gè)呈現(xiàn)引擎實(shí)例。每個(gè)標(biāo)簽頁(yè)都是一個(gè)獨(dú)立的進(jìn)程。

二、主流程

呈現(xiàn)引擎一開(kāi)始會(huì)從網(wǎng)絡(luò)層獲取請(qǐng)求文檔的內(nèi)容,內(nèi)容的大小一般限制在 8000 個(gè)塊以內(nèi)。

然后進(jìn)行如下所示的基本流程:

呈現(xiàn)引擎將開(kāi)始解析 HTML 文檔,并將各標(biāo)記逐個(gè)轉(zhuǎn)化成“內(nèi)容樹(shù)”上的 DOM 節(jié)點(diǎn)。同時(shí)也會(huì)解析外部 CSS 文件以及樣式元素中的樣式數(shù)據(jù)。HTML 中這些帶有視覺(jué)指令的樣式信息將用于創(chuàng)建另一個(gè)樹(shù)結(jié)構(gòu):呈現(xiàn)樹(shù)。

呈現(xiàn)樹(shù)包含多個(gè)帶有視覺(jué)屬性(如顏色和尺寸)的矩形。這些矩形的排列順序就是它們將在屏幕上顯示的順序。

呈現(xiàn)樹(shù)構(gòu)建完畢之后,進(jìn)入“布局”處理階段,也就是為每個(gè)節(jié)點(diǎn)分配一個(gè)應(yīng)出現(xiàn)在屏幕上的確切坐標(biāo)。下一個(gè)階段是繪制 - 呈現(xiàn)引擎會(huì)遍歷呈現(xiàn)樹(shù),由用戶界面后端層將每個(gè)節(jié)點(diǎn)繪制出來(lái)。

需要著重指出的是,這是一個(gè)漸進(jìn)的過(guò)程。為達(dá)到更好的用戶體驗(yàn),呈現(xiàn)引擎會(huì)力求盡快將內(nèi)容顯示在屏幕上。它不必等到整個(gè) HTML 文檔解析完畢之后,就會(huì)開(kāi)始構(gòu)建呈現(xiàn)樹(shù)和設(shè)置布局。在不斷接收和處理來(lái)自網(wǎng)絡(luò)的其余內(nèi)容的同時(shí),呈現(xiàn)引擎會(huì)將部分內(nèi)容解析并顯示出來(lái)。

主流程示例:

三、處理腳本和樣式表的順序

腳本
網(wǎng)絡(luò)的模型是同步的。網(wǎng)頁(yè)作者希望解析器遇到 標(biāo)簽,會(huì)對(duì) last.js 文件進(jìn)行加載并放在瀏覽器緩存中,這樣當(dāng)解析器遇到這個(gè)

由上面兩張截圖可以看到,jquery.min.js 腳本文件與 bootstrap.css 等樣式文件并行加載,但是由于 chrome 的并發(fā)連接數(shù)上限為 6 個(gè),因此 bootstrap.min.js 腳本、xxx.css 樣式等文件的加載會(huì)等待前面的文件加載完成,有可用連接數(shù)的時(shí)候才開(kāi)始加載。

了解以上信息之后,我們可以對(duì)該頁(yè)面進(jìn)行相應(yīng)優(yōu)化,例如對(duì)CSS文件進(jìn)行壓縮處理、使用 CDN,將資源分布在多個(gè)域名下、合并 CSS 文件,減少 HTTP 請(qǐng)求數(shù)量等,來(lái)提高 CSS 的加載速度,減少 HTML 文檔解析和渲染的阻塞時(shí)間。

browser only allows six TCP connections per origin on HTTP 1.

瀏覽器的并發(fā)請(qǐng)求數(shù)目限制是針對(duì)同一域名的。因此可以使用 CDN 加速技術(shù)來(lái)提高用戶訪問(wèn)網(wǎng)站的響應(yīng)速度,這樣使用了 CDN 的資源加載不會(huì)占用當(dāng)前域名下的并發(fā)連接數(shù),從而減少阻塞的時(shí)間。

網(wǎng)頁(yè)性能

了解 HTML 文檔的解析和渲染的過(guò)程對(duì)于分析網(wǎng)頁(yè)性能有著重要意義,它可以幫助我們找到影響網(wǎng)頁(yè)性能的關(guān)鍵因素。例如,我們知道 JS 外部腳本的執(zhí)行會(huì)阻塞文檔的解析,那么重量級(jí)的第三方插件則會(huì)影響首頁(yè)加載的速度,如果因此影響到了用戶體驗(yàn),我們就需要考慮這個(gè)第三方插件的使用成本是不是太高了,能否使用其他輕量級(jí)的插件進(jìn)行替代,或者只使用其中一部分模塊。

以 Datatables 為例:

上圖是一個(gè)項(xiàng)目頁(yè)面的 Network 截圖,紅色框中的部分出現(xiàn)了約 700ms 左右的空白,我們需要知道為什么頁(yè)面的加載會(huì)出現(xiàn)這樣的情況,這段空白時(shí)間瀏覽器在干什么?

我們分析 Timeline 圖,看看瀏覽器在這段時(shí)間的具體信息,如下:

通過(guò) Timeline 圖我們可以看到,在 250ms~900ms 時(shí)間區(qū)間內(nèi),瀏覽器在執(zhí)行 datatables.min.js 腳本代碼,這個(gè)腳本的執(zhí)行阻塞了文檔的解析,耗時(shí)約 700ms,對(duì)應(yīng)了 Network 圖中的空白。

我們繼續(xù)查看頁(yè)面總的耗時(shí)時(shí)間,評(píng)估 700ms 耗時(shí)的影響,如下:

可以看到,頁(yè)面總的完成耗時(shí)為 1.66s,由此可知 datatables.min.js 的執(zhí)行耗時(shí)占了很大比重,應(yīng)當(dāng)慎重考慮是否一定要使用這個(gè)插件,能否使用其他輕量級(jí)的插件進(jìn)行替代,或者能否精簡(jiǎn)插件的不必要模塊,或者舍棄插件的使用。

參考資料-1
瀏覽器接收到html代碼,可能是一份完整的文檔,也可能是一個(gè)chunk,即開(kāi)始解析。解析過(guò)程是先構(gòu)建dom樹(shù),再根據(jù)dom樹(shù)構(gòu)建渲染樹(shù),最后瀏覽器將渲染樹(shù)繪制到頁(yè)面上。
構(gòu)建dom樹(shù)的過(guò)程即根據(jù)html代碼自上而下進(jìn)行構(gòu)建,當(dāng)遇到script文件加載/執(zhí)行會(huì)阻塞后面dom樹(shù)的構(gòu)建(javascript可能會(huì)改變dom樹(shù)),而遇到css文件則會(huì)阻塞渲染樹(shù)的構(gòu)建,即dom樹(shù)依然繼續(xù)構(gòu)建(除非遇到script標(biāo)簽并且css文件依舊未加載完成),但不會(huì)渲染繪制到頁(yè)面上。而無(wú)論哪個(gè)阻塞,該加載的文件還是會(huì)加載,例如html文檔中的其他css/js/圖片文件。
另外javascript被加載后就會(huì)被執(zhí)行,執(zhí)行的過(guò)程也阻塞樹(shù)的構(gòu)建。是執(zhí)行完了才解析其他內(nèi)容,而不是執(zhí)行完了才加載其他內(nèi)容。

作者:加冰
鏈接:https://www.zhihu.com/questio...

參考資料-2
首先,開(kāi)源瀏覽器一般以8k每塊下載html頁(yè)面。
然后解析頁(yè)面生成DOM樹(shù),遇到css標(biāo)簽或JS腳本標(biāo)簽就新起線程去下載他們,并繼續(xù)構(gòu)建DOM。
下載完后解析CSS為CSS規(guī)則樹(shù),瀏覽器結(jié)合CSS規(guī)則樹(shù)和DOM樹(shù)生成Render Tree。
注意:構(gòu)建CSS Object Model(CSSOM)會(huì)阻塞JavaScript的執(zhí)行。JavaScript的執(zhí)行也會(huì)阻塞DOM的構(gòu)建。
JavaScript下載后可以通過(guò)DOM API修改DOM,通過(guò)CSSOM API修改樣式作用域Render Tree。
每次修改會(huì)造成Render Tree的重新布局和重繪。只要修改DOM或修改了元素的形狀或大小,就會(huì)觸發(fā)Reflow,單純修改元素的顏色只需Repaint一下(調(diào)用操作系統(tǒng)Native GUI的API繪制)。

作者:陳金
鏈接:https://www.zhihu.com/questio...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/116007.html

相關(guān)文章

  • 覽器工作原理整理

    摘要:每種可被解析的格式必須具有由詞匯及語(yǔ)法規(guī)則組成的特定的文法,稱為上下文無(wú)關(guān)文法。解析解析器,每個(gè)標(biāo)識(shí)都有特定的正則進(jìn)行解析。開(kāi)發(fā)者可以將腳本標(biāo)識(shí)為,以使其不阻塞文檔解析,并在文檔解析結(jié)束后執(zhí)行。 瀏覽器組成 用戶界面-地址欄、按鈕之類的 瀏覽器引擎-用來(lái)查詢及操作渲染引擎的接口 渲染引擎-顯示請(qǐng)求的內(nèi)容 網(wǎng)絡(luò)-進(jìn)行網(wǎng)絡(luò)請(qǐng)求 ui后端-用來(lái)滬指選擇框、對(duì)話框的基本組件 js解析器 數(shù)據(jù)...

    hqman 評(píng)論0 收藏0
  • 覽器工作原理整理

    摘要:每種可被解析的格式必須具有由詞匯及語(yǔ)法規(guī)則組成的特定的文法,稱為上下文無(wú)關(guān)文法。解析解析器,每個(gè)標(biāo)識(shí)都有特定的正則進(jìn)行解析。開(kāi)發(fā)者可以將腳本標(biāo)識(shí)為,以使其不阻塞文檔解析,并在文檔解析結(jié)束后執(zhí)行。 瀏覽器組成 用戶界面-地址欄、按鈕之類的 瀏覽器引擎-用來(lái)查詢及操作渲染引擎的接口 渲染引擎-顯示請(qǐng)求的內(nèi)容 網(wǎng)絡(luò)-進(jìn)行網(wǎng)絡(luò)請(qǐng)求 ui后端-用來(lái)滬指選擇框、對(duì)話框的基本組件 js解析器 數(shù)據(jù)...

    Dionysus_go 評(píng)論0 收藏0
  • 覽器解析渲染HTML文檔過(guò)程

    摘要:瀏覽器的預(yù)解析可以減緩渲染被阻塞的情況,例如文檔解析過(guò)程中預(yù)加載器發(fā)現(xiàn)了標(biāo)簽,會(huì)對(duì)文件進(jìn)行加載并放在瀏覽器緩存中,這樣當(dāng)解析器遇到這個(gè)標(biāo)記時(shí),由于預(yù)加載器已經(jīng)將文件加載下來(lái)了,所以會(huì)被立即執(zhí)行,不需要等待從網(wǎng)絡(luò)抓取資源,減緩了對(duì)渲染的阻塞。 參考資料 瀏覽器的工作原理 瀏覽器加載網(wǎng)頁(yè)時(shí)的過(guò)程是什么? HTML渲染過(guò)程詳解 瀏覽器的工作原理 一、瀏覽器的高層結(jié)構(gòu) 瀏覽器的主要組件為:...

    warkiz 評(píng)論0 收藏0
  • 覽器解析渲染HTML文檔過(guò)程

    摘要:瀏覽器的預(yù)解析可以減緩渲染被阻塞的情況,例如文檔解析過(guò)程中預(yù)加載器發(fā)現(xiàn)了標(biāo)簽,會(huì)對(duì)文件進(jìn)行加載并放在瀏覽器緩存中,這樣當(dāng)解析器遇到這個(gè)標(biāo)記時(shí),由于預(yù)加載器已經(jīng)將文件加載下來(lái)了,所以會(huì)被立即執(zhí)行,不需要等待從網(wǎng)絡(luò)抓取資源,減緩了對(duì)渲染的阻塞。 參考資料 瀏覽器的工作原理 瀏覽器加載網(wǎng)頁(yè)時(shí)的過(guò)程是什么? HTML渲染過(guò)程詳解 瀏覽器的工作原理 一、瀏覽器的高層結(jié)構(gòu) 瀏覽器的主要組件為:...

    davidac 評(píng)論0 收藏0
  • Web性能優(yōu)化

    摘要:性能優(yōu)化網(wǎng)站的性能細(xì)線在幾個(gè)方面網(wǎng)站首頁(yè)加載速度動(dòng)畫(huà)的流暢度通過(guò)分析瀏覽器的渲染原理資源對(duì)渲染的影響,得出優(yōu)化網(wǎng)站性能的辦法。查看性能的工具的面板錄制網(wǎng)頁(yè)加載的過(guò)程,分析記錄瀏覽器渲染過(guò)程中每個(gè)過(guò)程的耗時(shí)。通過(guò)引入,可以避免阻塞。 1 Web性能優(yōu)化 Web網(wǎng)站的性能細(xì)線在幾個(gè)方面: 網(wǎng)站首頁(yè)加載速度 動(dòng)畫(huà)的流暢度 通過(guò)分析瀏覽器的渲染原理、資源對(duì)渲染的影響,得出優(yōu)化網(wǎng)站性能的辦法...

    ZHAO_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<