用戶在瀏覽器地址欄輸入地址之后,客戶端請求html頁面,該html頁面是如何渲染的,下面做出說明:
①客戶端請求頁面時,回去服務端抓取下載html文檔,包含的內容有:html文檔自身、script標簽引用js文件、link引用css文件、video引用視頻文件、audio引用音頻文件、im引用的圖片文件。會按照文檔類型(優先級高)以及頁面引用的順序多通道,同步加載資源,不同瀏覽器的通道數量不用。首先會加載html文檔
②加載到html文檔之后,會從上到下進行html文檔解析
③文檔解析過程中會生成一顆有dom元素節點組成的樹,叫做dom樹,dom樹中包含了頁面的所有元素,包括display:none(不可見)的元素
④dom樹生成之后,會結合cssom(樣式對象模型),生成render樹,render樹中會隱去一些頭部標簽還有display:none的標簽,就是說render樹中包含了所有可見元素
⑤之后再數據解析dom樹,將頁面中的標簽解析一遍,包含了引用外部資源的標簽,和不引用外部資源的標簽,將頁面內容填充上去,瀏覽器繪制完成整個頁面。對於外部引用的一些資源:css資源要做到盡量減少頁面重流;js繪制do節點會阻塞其他標簽解析、甚至下載;圖片資源,可以先使用分辨率比較低的圖片占位。
歡迎各位大佬批評指正。