頁面白屏有哪些檢測手段?
包括純前端,或 iOS/Android 客戶端中;但不是本地,而是用戶端。是否有可能做到業務無感?
首先得定義什麼叫做「白屏」呀。w3c 不標準化與「白屏」/「首屏」有關的性能指標就是因為很難定義。
First paint time · Issue #21 · w3c/navigation-timing
但是瀏覽器自己會定義這個 first meaningful paint,比如 chrome 的定義就是基於布局顯著性的
layout significance = number of layout objects added / max(1, page height / screen height)
https://docs.google.com/document/d/1BR94tJdZLsin5poeet0XoTW60M0SjvOJQttKT-JK8HI/view
介紹一個 W3C 規範里的利器:MutationObserver
剩下的應該就知道怎麼做了
如果是題主問的是用戶側如何檢測到頁面出現問題導致的白屏情況...emmm...我不造阿
但假設,題主問的是用戶端載入Web頁面的白屏時間點,而不是因為異常ERROR導致頁面白屏的話...
第一種情況: 獲得Web頁面載入的精確時間點
A. loadingTimes
在PC Chrome62版本後,提供了一個API:
chrome.loadingTimes()
返回一個對象
{
commitLoadTime:1508903864.785
connectionInfo:"h2"
finishDocumentLoadTime:1508903865.951
finishLoadTime:1508903869.145
firstPaintAfterLoadTime:0
firstPaintTime:1508903865.94 // 第一次Paint時間,頁面出現內容時間
navigationType:"Other"
npnNegotiatedProtocol:"h2"
requestTime:1508903862.098 // 開始請求時間點
startLoadTime:1508903862.098 // 開始載入時間點
wasAlternateProtocolAvailable:false
wasFetchedViaSpdy:true
wasNpnNegotiated:true
}
我們可以看到 firstPaintTime 這個時間點,是你的頁面出現內容後的時間點..如果頁面一直白屏的話,firstPaintTime的值是0。
所以說,在這種情況下,在我們的開發環境是可以獲得到非白屏的時間點。
B. PerformanceObserver
關於這個東西,之前在知乎上看到的文章,使用 Paint Timing API 提高性能,講述的很不錯,我就複述了,差不多就是可以在JS代碼里拿到性能的數據
第二種情況:不那麼精確的Web首屏載入時間點
A. 直出頁面
&
&...直出內容&
&
&
關於瀏覽器對頁面的解析我就不說了,按照我們的常識理解就是,在外鏈JS執行之前,瀏覽器會優先交付首屏內容。在多數情況下,也的確是這樣的,這樣的話,在如上打點是OK的,大概和真實交付時間會相差100ms左右吧。
但是,瀏覽器往往有自己的優化,當JS資源載入很快時,瀏覽器可能不會先交付首屏內容,而是執行完外鏈的JS後,才交付內容...emmmm...這我就沒有想好怎麼辦了
B. 非直出頁面
Vue的話,就是mounted事件咯,React同理,其他框架也差不多...
推薦閱讀: