瀏覽器渲染機(jī)制和性能優(yōu)化點(diǎn)

瀏覽器渲染機(jī)制和性能優(yōu)化點(diǎn)

客戶端從服務(wù)器獲取到需要渲染頁(yè)面的源代碼后

  1. 開(kāi)辟一個(gè)GUI渲染線程,自上而下執(zhí)行解析代碼,最后繪制出對(duì)應(yīng)的頁(yè)面
  2. 自上而下渲染解析代碼的過(guò)程是 同步 的,但也有一些操作是異步的。

關(guān)于各種資源的加載

  1. 關(guān)于CSS資源的加載
    • 遇到的是<style>內(nèi)嵌樣式, 同步渲染, 交給GUI渲染線程解析
    • 遇到<link>外鏈樣式
      1.1 異步 開(kāi)辟一個(gè)新的 http網(wǎng)絡(luò)請(qǐng)求線程
      注意:同一個(gè)源下,瀏覽器最多只允許同事開(kāi)啟4-7個(gè)http線程
      1.2 不等資源請(qǐng)求回來(lái),GUI 渲染線程繼續(xù)向下渲染解析
      1.3 GUI渲染線程同步操作都處理完成后,再把HTTP網(wǎng)絡(luò)線程請(qǐng)求回來(lái)的資源文件進(jìn)行解析渲染
      1.4 css文件內(nèi)遇到@import , 這個(gè)操作是同步,開(kāi)辟一個(gè)新的http網(wǎng)絡(luò)線程去請(qǐng)求資源文件,但是在資源文件沒(méi)有請(qǐng)求回來(lái)之前,GUI渲染線程繼續(xù)向下渲染
  1. 遇到script把資源的請(qǐng)求
    • 默認(rèn)都是 同步
    • 必須記憶和Http網(wǎng)絡(luò)線程,把資源請(qǐng)求回來(lái)之后,并且交給 js渲染線程 渲染解析完成后,GUI渲染線程才能繼續(xù)向下渲染,所以script默認(rèn)也是阻止GUI渲染
    • async屬性 首先也是開(kāi)辟一個(gè)http網(wǎng)絡(luò)線程去加載資源文件,于此同時(shí)GUI渲染線程向下渲染 把默認(rèn)的同步改為異步,但是一旦資源請(qǐng)求后,會(huì)中斷GUI的信號(hào)渲染,把先請(qǐng)求回來(lái)的js進(jìn)行渲染解析
    • defer屬性 也是開(kāi)辟一個(gè)網(wǎng)絡(luò)線程去加載資源文件,同時(shí)GUI渲染線程向下渲染,等GUI渲染完成,在檢查script依賴的文件,根據(jù)順序進(jìn)行渲染執(zhí)行。對(duì)比async defer 都是異步,但是defer會(huì)保證隊(duì)列任務(wù)的正常。
  2. img標(biāo)簽請(qǐng)求
    • src里面檢測(cè)到是外鏈的情況下,也是開(kāi)辟一個(gè)網(wǎng)絡(luò)線程去加載圖片,等GUI線程處理完畢后,再檢查圖片文件是否請(qǐng)求完成。如果完成,就渲染圖片。

加載過(guò)程

  1. dom tree
  2. cssdom tree
  3. render tree
  4. layout
  5. painting

未完。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容