瀏覽器主要元件結構
#(瀏覽器主要元件)
渲染引擎-webkit和Gecko
Firefox使用Geoko-Mozilla自主研發的渲染引擎。
Safari和Chrome都使用webkit。 Webkit是一款開源渲染引擎,它本來是為linux平台研發的,後來由Apple移植到Mac及Windows。
本文我主要以webkit渲染引擎來講解,儘管webkit和Gecko使用的術語稍有不同,他們的主要流程基本上相同。
(webkit渲染引擎流程)
#關鍵渲染路徑
#關鍵渲染路徑是指瀏覽器從最初接收請求來的HTML 、CSS、javascript等資源,然後解析、建構樹、渲染佈局、繪製,最後呈現給客戶能看到的介面這整個過程。
所以瀏覽器的渲染過程主要包括以下幾個步驟:
解析HTML產生DOM樹。
解析CSS產生CSSOM規則樹。
將DOM樹與CSSOM規則樹合併在一起產生渲染樹。
遍歷渲染樹開始佈局,計算每個節點的位置大小資訊。
將渲染樹每個節點繪製到螢幕。
建構DOM樹
當瀏覽器接收到伺服器回應來的HTML文件後,會遍歷文件節點,產生DOM樹。
要注意的是,DOM樹的生成過程中可能會被CSS和JS的載入執行阻塞。渲染阻塞問題下文會講。
建構CSSOM規則樹
瀏覽器解析CSS檔案並產生CSS規則樹,每個CSS檔案都被分析成一個StyleSheet對象,每個物件都包含CSS規則。 CSS規則物件包含對應於CSS語法的選擇器和聲明物件以及其他物件。
渲染阻塞
當瀏覽器遇到一個 script 標記時,DOM 建置將會暫停,直到腳本完成執行,然後繼續建置DOM。每次去執行JavaScript腳本都會嚴重地阻塞DOM樹的構建,如果JavaScript腳本還操作了CSSOM,而正好這個CSSOM還沒有下載和構建,瀏覽器甚至會延遲腳本執行和構建DOM,直至完成其CSSOM的下載和構建。
所以,script 標籤的位置很重要。實際使用時,可以遵循以下兩個原則:
CSS 優先:引入順序上,CSS 資源先於 JavaScript 資源。
JS置後:我們通常會把JS程式碼放到頁面底部,且JavaScript 應盡量少影響 DOM 的建置。
當解析html的時候,會把新來的元素插入dom樹裡面,同時去查找css,然後把對應的樣式規則應用到元素上,查找樣式表是按照從右到左的順序去匹配的。
例如: div p {font-size: 16px},會先尋找所有p標籤並判斷它的父標籤是否為div之後才會決定要不要採用這個樣式進行渲染)。
所以,我們平常寫CSS時,盡量用id和class,千萬不要過渡層疊。
建構渲染樹
透過DOM樹和CSS規則樹我們便可以建立渲染樹。瀏覽器會先從DOM樹的根節點開始遍歷每個可見節點。對每個可見節點,找到其適配的CSS樣式規則並套用。
渲染樹建置完成後,每個節點都是可見節點且都包含其內容和對應規則的樣式。這也是渲染樹與DOM樹最大的差別。渲染樹是用來顯示,那些不可見的元素當然就不會在這棵樹中出現了,譬如。除此之外,display等於none的也不會被顯示在這棵樹裡頭,但是visibility等於hidden的元素是會顯示在這棵樹裡頭的。
渲染樹佈局
佈局階段會從渲染樹的根節點開始遍歷,然後確定每個節點物件在頁面上的確切大小與位置,佈局階段的輸出是一個盒子模型,它會精確地捕獲每個元素在螢幕內的確切位置與大小。
渲染樹繪製
在繪製階段,遍歷渲染樹,呼叫渲染器的paint()方法在螢幕上顯示其內容。渲染樹的繪製工作是由瀏覽器的UI後端元件完成的。
reflow與repaint:
根據渲染樹佈局,計算CSS樣式,即每個節點在頁面中的大小和位置等幾何資訊。 HTML預設是串流佈局的,CSS和js會打破這個佈局,改變DOM的外觀樣式以及大小和位置。這時就要提到兩個重要概念:replaint和reflow。
replaint:螢幕的一部分重畫,不影響整體佈局,例如某個CSS的背景色變了,但元素的幾何尺寸和位置不變。
reflow: 表示元件的幾何尺寸變了,我們需要重新驗證並計算渲染樹。是渲染樹的一部分或全部發生了變化。這就是Reflow,或是Layout。
所以我們應該盡量減少reflow和replaint,我想這也是為什麼現在很少有用table佈局的原因之一。
display:none 會觸發reflow,visibility: hidden屬性不算是不可見屬性,它的語意是隱藏元素,但元素仍然佔據著佈局空間,它會被渲染成一個空框,所以visibility :hidden 只會觸發repaint,因為沒有發生位置變化。
有些情況下,例如修改了元素的樣式,瀏覽器並不會立刻reflow 或repaint 一次,而是會把這樣的操作積攢一批,然後做一次reflow,這又叫異步reflow 或增量異步reflow。
有些情況下,例如 resize 窗口,改變了頁面預設的字體等。對於這些操作,瀏覽器會馬上進行 reflow。
小結
本文我們就瀏覽器渲染流程逐步了解了一遍,相信大家一定都有所新的收穫,如果大家對於瀏覽器渲染流程還有任何疑問,歡迎反饋,我們共同交流,共同學習,共同進步。
相關閱讀:
以上是詳解瀏覽器渲染流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

設置標籤的lang屬性是優化網頁可訪問性和SEO的關鍵步驟。 1)在標籤中設置lang屬性,如。 2)在多語言內容中,為不同語言部分設置lang屬性,如。 3)使用符合ISO639-1標準的語言代碼,如"en"、"fr"、"zh"等。正確設置lang屬性可以提高網頁的可訪問性和搜索引擎排名。

htmlattributeseresene forenhancingwebelements'functionalityandAppearance.TheyAdDinformationTodeFineBehavior,外觀和互動,使網站互動,響應式,visalalyAppealing.AttributesLikutesLikeSlikEslikesrc,href,href,href,類,類型,類型,和dissabledtransfransformformformformformformformformformformformformformformforment

toCreateAlistInHtml,useforforunordedlistsandfororderedlists:1)forunorderedlists,wrapitemsinanduseforeachItem,RenderingeringAsabulletedList.2)fororderedlists,useandfornumberedlists,useandfornumberedlists,casundfornumberedlists,casundfornthetthetthetthetthetthetthetttributefordforderfordforderforderentnumberingsnumberingsnumberingStys。

HTML用於構建結構清晰的網站。 1)使用標籤如、、定義網站結構。 2)示例展示了博客和電商網站的結構。 3)避免常見錯誤如標籤嵌套不正確。 4)優化性能通過減少HTTP請求和使用語義化標籤。

toinsertanimageIntoanhtmlpage,usethetagwithsrcandaltattributes.1)usealttextforAcccessibilityandseo.2)instementRcsetForresponSiveImages.3)applylazyloadingWithLoadingWithLoading =“ lazy” tooptimizeperformance.4)tooptimizeperformance.4)

HTML的核心目的在於讓瀏覽器理解並展示網頁內容。 1.HTML通過標籤定義網頁結構和內容,如、到、等。 2.HTML5增強了多媒體支持,引入了和標籤。 3.HTML提供了表單元素,支持用戶交互。 4.優化HTML代碼可提升網頁性能,如減少HTTP請求和壓縮HTML。

htmltagsareessentialforwebdevelopmentastheyandendenhancewebpages.1)semantictagsimproveaccessibilityandseo.2)semanteLayOut,語義和互動性。 3)poseriblesibilityandseoandseo.3)poseriblesoftagscanoftagscanoftagscanoptagscanoptimizeperefeneandimizeanDenSuroceRecRoscRoss-BrowserCrowserCercerComercompatibility。

一致的HTML編碼風格很重要,因為它提高了代碼的可讀性、可維護性和效率。 1)使用小寫標籤和屬性,2)保持一致的縮進,3)選擇並堅持使用單引號或雙引號,4)避免在項目中混合使用不同風格,5)利用自動化工具如Prettier或ESLint來確保風格的一致性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具