摘要:下面我們撇開網絡方面的優化,只分析靜態資源方面的優化。不過,也會阻止的構建和延緩網頁渲染。未優化正常加載優化后異步加載根據上面的分析,我們可以清楚的認識到,非必要優先加載的,選擇異步加載是最優選擇。
為什么做優化
經典問題:白屏時間過長,用戶體驗差怎么做優化
產生的原因:網絡問題、關鍵渲染路徑(CRP)問題
如何做好優化呢,網上隨便一搜,就有很多優化總結,無非就是網絡優化、靜態資源(html、js、css、image)優化。下面我們撇開網絡方面的優化,只分析靜態資源方面的優化。而靜態資源的優化關鍵在于你要去深入理解關鍵渲染路徑(CRP)的運行原理和規則。一、了解瀏覽器關鍵渲染路徑(html加載過程)
面試必問:
1、描述一下從url輸入到頁面展示的全過程?
2、描述一下html加載全過程?
如何準確回答類似上面的問題呢,那么我們就需要全面了解瀏覽器關鍵渲染路徑了,了解了工作原理,我們才能更好的更深入的理解靜態資源的優化方案
渲染的關鍵路徑分為以下五步
構建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標記為不阻塞渲染 (媒體查詢的不足就是會嚴重影響關鍵渲染路徑的性能) 3、瀏覽器**會下載所有CSS資源**、無論它阻塞還是不阻塞
根據上面三個知識點,會讓你很清晰的知道,CSS優化可以做的事情就是,根據不同CSS使用場景和優先級的不同進行不阻塞標記。二、javascript對渲染的影響和降低影響的策略
如果是必要的CSS就請盡早的加載(1、引用位置靠前,2、減小文件體積)到客戶端,這樣就減少了對首次渲染的阻塞
首先我們來討論下javascript。它可以修改網頁的方方面面,內容、樣式、以及響應用戶的交互。不過,javascript也會阻止DOM的構建和延緩網頁渲染。下面我們來了解一下javascript和DOM、CSSOM的依賴關系。
javascript能修改內容和樣式
無論(內聯javascript還是外部javascript文件)都會阻止DOM的構建
DOM構建過程中如果遇到(非異步加載async)的javascript標簽,瀏覽器將會終止DOM的構建,立即執行javascript。 這就是為什么非異步執行的javascript要放在尾部或者將可執行代碼要放在DOMContentLoaded回調中? 因為如果該javascript代碼操作了未構建完的DOM節點就會因為無法獲取該節點而無法執行響應的操作。
CSSOM的構建影響javascript的執行
如果在瀏覽器尚未完成CSSOM的下載和構建時,去運行javascript腳本,那么瀏覽器會延遲腳本的執行和DOM的構建,直至完成CSSOM的下載和構建??梢赃@樣理解,當出現非異步加載的javascript時,CSSOM構建完成時間是早于javascript的執行,兩者早于DOMContentloaded(即DOM構建徹底完成)。
根據上面的分析,我們可以清楚的認識到,非必要優先加載的js,選擇異步加載是最優選擇。三、image對首屏渲染的影響
圖像不會阻止首屏的渲染,但是為了增加用戶體驗我們應該考慮加載適當大小的圖片,加速圖片的呈現。如何評估關鍵渲染路徑
前面的內容讓我們了解了關鍵路徑渲染的基本原理和可能優化的機會,下面我們就需要使用一些工具,幫助我們去評估現有頁面的CRP性能。
測試工具:Lighthouse 可以快速測試你的網頁,并提供性能報告
監控工具:Nivigation Timing Api 設置你的代碼,實時監控用戶使用過程中的性能。
總結javascript阻止DOM構建( DOMContentLoaded觸發被延遲),css的下載和完成阻止javascript的執行。在沒有javascript或者只含有異步javascript的頁面中,DOM的構建和CSSOM的構建互不影響。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/113354.html
摘要:下面我們撇開網絡方面的優化,只分析靜態資源方面的優化。不過,也會阻止的構建和延緩網頁渲染。未優化正常加載優化后異步加載根據上面的分析,我們可以清楚的認識到,非必要優先加載的,選擇異步加載是最優選擇。 為什么做優化 經典問題:白屏時間過長,用戶體驗差產生的原因:網絡問題、關鍵渲染路徑(CRP)問題 怎么做優化 如何做好優化呢,網上隨便一搜,就有很多優化總結,無非就是網絡優化、靜態資源(h...
摘要:下面我們撇開網絡方面的優化,只分析靜態資源方面的優化。不過,也會阻止的構建和延緩網頁渲染。未優化正常加載優化后異步加載根據上面的分析,我們可以清楚的認識到,非必要優先加載的,選擇異步加載是最優選擇。 為什么做優化 經典問題:白屏時間過長,用戶體驗差產生的原因:網絡問題、關鍵渲染路徑(CRP)問題 怎么做優化 如何做好優化呢,網上隨便一搜,就有很多優化總結,無非就是網絡優化、靜態資源(h...
摘要:前言對于前端的性能話題,從來都沒有斷絕過。作為一個前端開發者,性能是我們關注的指標。前端發展以來,優化方式,琳瑯滿目,有雅虎軍規等。所以,接下來我會從三個方面就前端性能進行總結網絡方面操作及渲染方面數據方面。 前言 對于前端的性能話題,從來都沒有斷絕過。因為這個東西沒有最好,只有更好。而且往往也是業務的繁雜程度去決定優化程度的。作為一個前端開發者,性能是我們關注的指標。它直接影響著我們...
閱讀 1035·2021-11-22 13:53
閱讀 1590·2021-11-17 09:33
閱讀 2390·2021-10-14 09:43
閱讀 2850·2021-09-01 11:41
閱讀 2271·2021-09-01 10:44
閱讀 2911·2021-08-31 09:39
閱讀 1448·2019-08-30 15:44
閱讀 1860·2019-08-30 13:02