渲染的關鍵路徑分為以下五步
構建DOM樹
構建過程:Bytes->Characters->Tokens->Nodes->Dom
構建CSSOM樹
構建過程:Bytes->Characters->Tokens->Nodes->CSSOM
合并DOM樹和CSSOM樹構建渲染樹
1、過濾掉不可見節點(腳本標記、元標記) 2、過濾掉樣式隱藏的節點(display:none)
根據渲染樹來布局,計算節點的幾何信息(layout)
將各個節點繪制在屏幕上(paint)
首先從上面的五步中看出,只有當DOM樹和CSSOM樹都構建完成之后才可以進行渲染樹的構建,所以這兩步是對整體渲染起阻塞作用的,當然了DOM樹是必須的,它提供給頁面內容,而CSSOM的必要性并不是太明顯,所以在CSSOM構建的過程中可以做一些優化。在做優化前先要了解這幾個知識點。
1、默認情況下,CSS是阻塞渲染的資源 2、我們可以通過媒體查詢和媒體類型把一部分CSS標記為不阻塞渲染 (媒體查詢的不足就是會嚴重影響關鍵渲染路徑的性能) <link href="style.css" rel="stylesheet"> <link href="print.css" rel="stylesheet" media="print"> <link href="other.css" rel="stylesheet" media="(min-width: 40em)"> 3、瀏覽器**會下載所有CSS資源**、無論它阻塞還是不阻塞
javascript能修改內容和樣式
無論(內聯javascript還是外部javascript文件)都會阻止DOM的構建
DOM構建過程中如果遇到(非異步加載async)的javascript標簽,瀏覽器將會終止DOM的構建,立即執行javascript。 這就是為什么非異步執行的javascript要放在尾部或者將可執行代碼要放在DOMContentLoaded回調中? 因為如果該javascript代碼操作了未構建完的DOM節點就會因為無法獲取該節點而無法執行響應的操作。
CSSOM的構建影響javascript的執行
如果在瀏覽器尚未完成CSSOM的下載和構建時,去運行javascript腳本,那么瀏覽器會延遲腳本的執行和DOM的構建,直至完成CSSOM的下載和構建??梢赃@樣理解,當出現非異步加載的javascript時,CSSOM構建完成時間是早于javascript的執行,兩者早于DOMContentloaded(即DOM構建徹底完成)。
前面的內容讓我們了解了關鍵路徑渲染的基本原理和可能優化的機會,下面我們就需要使用一些工具,幫助我們去評估現有頁面的CRP性能。
測試工具:Lighthouse 可以快速測試你的網頁,并提供性能報告
監控工具:Nivigation Timing Api 設置你的代碼,實時監控用戶使用過程中的性能。
相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!
推薦閱讀:
前端測試金字塔使用步驟詳解
怎樣處理MySQL數據庫拒絕訪問
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com