深入瞭解現代瀏覽器(三)

  翻譯文章,原文:Inside look at modern web browser (part 3)[1]

深入瞭解現代瀏覽器(三)

渲染器進程的內部運作

這是瀏覽器(共4部分)系列文章的第3部分,介紹了瀏覽器的工作方式。之前,我們介紹了多進程體系結構和導航流程。在本文中,我們將研究渲染器過程中發生的情況。

渲染器過程涉及Web性能的許多方面。由於渲染器過程內部發生了很多事情,因此本文僅是概述。如果您想更深入地瞭解,Web基礎知識的性能部分[2]將提供更多資源。

渲染器進程處理Web內容

渲染器進程負責選項卡內部發生的所有事情。在渲染器過程中,主線程處理您發送給用戶的大多數代碼。如果您使用網絡工作者或服務工作者,則有時JavaScript的某些部分由工作者線程處理。合成器和光柵線程也運行在渲染器進程內部,以高效,流暢地渲染頁面。

渲染器進程的核心工作是將HTML,CSS和JavaScript轉換為用戶可以與之交互的網頁。

深入瞭解現代瀏覽器(三)

圖1:內部包含主線程,工作線程,合成器線程和柵格線程的渲染器進程

解析

DOM的構造

當渲染器進程收到導航的提交消息並開始接收HTML數據時,主線程開始解析文本字符串(HTML),並將其轉換為文檔對象模型(DOM)。

DOM是瀏覽器對頁面的內部表示以及Web開發人員可以通過JavaScript與之交互的數據結構和API。

HTML標準將HTML文檔解析為DOM。您可能已經注意到,將HTML顯示到瀏覽器永遠不會引發錯誤。例如,缺少結束 p>標記是有效的HTML。標記錯誤,Hi! I'm Chrome!(b標籤在i標籤之前關閉)被視為您寫了Hi! I'm Chrome!。這是因為HTML規範旨在優雅地處理這些錯誤。如果您對如何完成這些操作感到好奇,可以閱讀HTML規範的 "An introduction to error handling and strange cases in the parser[3]"部分。

子資源加載

網站通常使用外部資源,例如圖像,CSS和JavaScript。這些文件需要從網絡或緩存中加載。主線程可以在解析以構建DOM時找到它們時一個接一個地請求它們,但是為了加快速度,“預加載掃描程序”同時運行。如果HTML文檔中有

或之類的內容,則預加載掃描程序會窺視HTML解析器生成的令牌,並在瀏覽器進程中將請求發送到網絡線程。

深入瞭解現代瀏覽器(三)

圖2:主線程解析HTML並構建DOM樹

JavaScript可以阻止解析

HTML解析器找到


分享到:


相關文章: