web性能優化之頁面加載體驗(骨架屏)


針對web頁面的首屏加載問題,一直是個問題,為此還引出一個性能考量標准:白屏時間、首屏時間。

1.白屏時間

打開chrome控制台的Performance,我們可以看到頁面的渲染快照:

 

這段白屏時間影響的因素歸根結底就是:資源加載耗時較長(chunk.js文件下載耗時35.75s);

 

而對於現在的大行其道的SPA來說,只要這個js文件沒有執行,那么頁面的代碼就只是這樣:

自然渲染結果暫時就只是一個白板咯

2.首屏時間

通常首屏內容中加載最慢的就是圖片或者 iframe 資源,因此可以理解為當圖片或者 iframe 都加載出來了,首屏肯定已經完成了。

所以只需要通過此類dom元素的onload事件來記錄資源加載的最長的那個時間點,然后與performance.timing.navigationStart比較久可以算出首屏渲染所需要的時間了;

performance.timing.navigationStart:表示從上一個文檔卸載結束時的 unix 時間戳,如果沒有上一個文檔,這個值將和 fetchStart 相等。

3.優化點分析

根據上述兩段分析,我們可以知道,白屏時間限制於帶寬,針對這一點,我們可以對靜態文件進行CDN加速、OOS之類的來提高訪問速度;

借用一位同學的相關文章: https://www.jianshu.com/p/c001ac7cdf21

默認我們已經解決了白屏的問題(資源訪問速度);

接下來就是首屏渲染的問題:

瀏覽器解析js是需要時間的(js的執行關系到頁面數據的填充);

img等標簽請求網絡資源也是需要時間的(多圖片的可以考慮圖片懶加載,當然這不是這篇文章討論的)

對此,有一種解決方案就是骨架屏。

4.骨架屏

骨架屏長這樣:

就是在數據或者資源渲染之前,讓用戶看到一個頁面的骨架,不至於讓用戶對着空白屏傻傻等待。

針對現在的SPA應用,其實只要針對首屏做一個骨架屏就可以了;

這里有一個用vue-skeleton-webpack-plugin這個插件設置骨架屏的案例:https://www.jianshu.com/p/0a1b01ad62d6

骨架屏的顯示邏輯是這樣的:

從代碼上來看,其實就是在不同的時間節點上用不同的dom片段來填充下面的區域:

5.骨架屏的生成/制作

手動編寫骨架屏代碼;

svg輪廓圖片代替dom節點以及css樣式;

自動化生成骨架屏代碼(https://github.com/Jocs/jocs.github.io/issues/22

6.快捷方法

打開首屏,找到根節點,右鍵編輯:

 

將可id="app"內部區域代碼復制到你的骨架屏頁面;

然后index.html稍加樣式:

針對有偽元素的dom節點可以使用偽元素來實現該dom節點骨架屏樣式;

那么不支持偽元素的dom節點怎么處理呢(input、img等),暫時考慮用span標簽將其包圍,並且span標簽設置為行內塊狀元素;

這樣首頁的骨架屏就做好了 ^_^ ,是不是很便捷

 

參考: https://www.cnblogs.com/eco-just/p/12343565.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM