頁面渲染機制是瀏覽器將HTML、CSS和JavaScript等代碼轉(zhuǎn)換為可視化頁面的過程。以下是頁面渲染的主要步驟:
HTML解析:瀏覽器首先接收HTML文件,然后對其進行解析,創(chuàng)建一個叫做DOM(Document Object Model)的數(shù)據(jù)結(jié)構(gòu)。DOM是HTML元素的樹形表示,它能夠讓JavaScript和CSS訪問和操作頁面的內(nèi)容。
CSS解析:同時,瀏覽器也會解析CSS文件,生成另一個數(shù)據(jù)結(jié)構(gòu),稱為CSSOM(CSS Object Model)。CSSOM包含了所有樣式信息,如顏色、布局等。
渲染樹構(gòu)建:瀏覽器會將DOM和CSSOM結(jié)合起來,創(chuàng)建一個渲染樹(Render Tree)。渲染樹包含了所有需要顯示在頁面上的DOM節(jié)點和這些節(jié)點的樣式信息。這個過程會忽略那些對渲染沒有影響的節(jié)點,如script標(biāo)簽、meta標(biāo)簽等。
布局(Layout):也被稱為“重排”或“回流”,這個階段是計算渲染樹中所有節(jié)點在最終頁面上的位置和大小。瀏覽器會遍歷渲染樹,為每個節(jié)點分配一個應(yīng)出現(xiàn)在屏幕上的確切坐標(biāo)和大小。這個過程的結(jié)果是一個“盒模型”,它精確地描繪了每個元素在視口中的位置。
繪制(Paint):也稱為“重繪”,一旦渲染樹構(gòu)建完畢并且布局完成后,瀏覽器就會開始繪制頁面。瀏覽器UI組件會遍歷渲染樹并調(diào)用渲染對象的繪制(paint)方法,將內(nèi)容展現(xiàn)在屏幕上。如果某個元素的樣式發(fā)生變化,但不影響其位置或大小(例如顏色變化),那么只需要進行重繪,而不需要重新布局。
此外,還有兩種主要的渲染技術(shù):
服務(wù)端渲染(SSR):在服務(wù)端生成HTML網(wǎng)頁的DOM元素,客戶端(瀏覽器)只負(fù)責(zé)顯示DOM元素內(nèi)容。這有利于SEO,因為網(wǎng)站通過href的url將搜索引擎直接引到服務(wù)端,服務(wù)端提供優(yōu)質(zhì)的網(wǎng)頁內(nèi)容給搜索引擎。但缺點是服務(wù)端完成一部分客戶端的工作,通常完成一個需求需要修改客戶端和服務(wù)端的代碼,開發(fā)效率低,不利于系統(tǒng)的穩(wěn)定性。
客戶端渲染:客戶端(瀏覽器)使用AJAX向服務(wù)端發(fā)起http請求,獲取到了想要的數(shù)據(jù)后,開始渲染HTML網(wǎng)頁,生成DOM元素,并最終將網(wǎng)頁內(nèi)容展示給用戶。這種方式的優(yōu)點是客戶端負(fù)責(zé)渲染,用戶體驗性好,服務(wù)端只提供數(shù)據(jù)不用關(guān)心用戶界面的內(nèi)容,有利于提高服務(wù)端的開發(fā)效率。適用于對SEO沒有要求的系統(tǒng),比如后臺管理類的系統(tǒng)。以上就是頁面渲染機制的主要步驟和兩種主要的渲染技術(shù)。
性能優(yōu)化是前端不可避免的事情,畢竟誰更好用誰更快這些往往就是衡量一個產(chǎn)品的一方面的標(biāo)準(zhǔn)。就好像給人的第一印象。
從輸入URL到頁面渲染,瀏覽器會經(jīng)歷一系列的過程。以下是這些過程的主要階段以及針對每個階段的優(yōu)化建議:
URL解析和DNS解析:瀏覽器首先解析輸入的URL,確定要訪問的域名。接著進行DNS解析,將域名轉(zhuǎn)換為IP地址。
優(yōu)化:
建立TCP連接:瀏覽器通過TCP協(xié)議與服務(wù)器建立連接。
優(yōu)化:
發(fā)送HTTP請求:瀏覽器向服務(wù)器發(fā)送HTTP請求,請求頁面內(nèi)容。
優(yōu)化:
服務(wù)器處理和響應(yīng):服務(wù)器接收到請求后,處理請求并生成響應(yīng)內(nèi)容。
優(yōu)化:
瀏覽器接收和解析HTML:瀏覽器接收到HTML文檔后,開始解析HTML并構(gòu)建DOM樹。
優(yōu)化:
CSS解析和渲染:瀏覽器解析CSS樣式并構(gòu)建CSSOM樹。將DOM樹和CSSOM樹合并成渲染樹(Render Tree)。
優(yōu)化:
JavaScript執(zhí)行和DOM操作:瀏覽器執(zhí)行JavaScript代碼,并可能進行DOM操作。
優(yōu)化:
頁面渲染:瀏覽器根據(jù)渲染樹繪制頁面內(nèi)容。
優(yōu)化:
本文鏈接:http://www.tebozhan.com/showinfo-26-87269-0.html從輸入 Url 到頁面渲染的不同階段給出優(yōu)化建議
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Python Queue模塊全攻略
下一篇: @Async注解失效的九種場景