JS瀏覽器的首屏白屏?xí)r間計(jì)算示例詳解
首屏?xí)r間 白屏?xí)r間簡介
首屏?xí)r間也稱用戶完全可交互時(shí)間。是整個(gè)頁面首屏完全渲染出來,用戶可以進(jìn)行完整交互所花費(fèi)的時(shí)間。該指標(biāo)值可以衡量頁面訪問速度。
白屏?xí)r間,指從用戶發(fā)出請(qǐng)求(例如在瀏覽器地址欄中輸入網(wǎng)址或點(diǎn)擊鏈接)到瀏覽器開始顯示頁面內(nèi)容之間的時(shí)間間隔。
首屏?xí)r間、白屏?xí)r間二者的計(jì)算都是計(jì)算一個(gè)時(shí)間間隔。
都需要找到選取一個(gè)開始時(shí)刻 startTime,選取一個(gè)結(jié)束時(shí)刻 endTime,計(jì)算出 endTime 和 startTime 兩者之間的差值。
這里 startTime 取 window.performance.getEntriesByType('navigation')[0].startTime,即開始記錄性能時(shí)間。
endTime 的取法有講究。
首屏?xí)r間的計(jì)算
endTime 的取值定義為 DOM 穩(wěn)定的時(shí)間點(diǎn)。
一個(gè)用 MutationObserver的實(shí)現(xiàn)思路
監(jiān)聽 DOM 變化,每次 DOM 變化都計(jì)算一個(gè)相對(duì)時(shí)間(time)和 DOM 變化的分?jǐn)?shù),存入一個(gè) observerData 數(shù)組中。
而后處理 observerData 數(shù)組,計(jì)算 DOM 變化時(shí)分?jǐn)?shù)的差值,取 DOM 分?jǐn)?shù)變化最大的時(shí)間點(diǎn)作為首屏?xí)r間的取值點(diǎn)。
白屏?xí)r間的計(jì)算
endTime
endTime 是取瀏覽器開始渲染<body>標(biāo)簽或者解析完<head>標(biāo)簽的時(shí)刻。
那么在<head>標(biāo)簽的尾部添加一段 js 代碼:
<head>
<!-- head標(biāo)簽尾部 -->
<script type="text/javascript">
// 白屏?xí)r間結(jié)束點(diǎn) window.firstPaint = Date.now();
</script>
</head>
firstPaint 就是白屏?xí)r間結(jié)束點(diǎn) endTime。
補(bǔ)充幾種獲取時(shí)間的方式
- window.performance.timing (廢棄屬性)
window.performance.timing 是一個(gè)對(duì)象,它的各個(gè) key 對(duì)應(yīng)的 value 獲取的是 以毫秒顯示的 Unix 時(shí)間戳 (Unix epoch, 從 1970 年 1 月 1 日(UTC/GMT 的午夜)開始所經(jīng)過的秒數(shù))
window.performance.timing.connectStart
< 1698805501629new Date(window.performance.timing.connectStart)
< Wed Nov 01 2023 10:25:01 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)

- window.performance.getEntriesByType()
window.performance.getEntriesByType("key")獲取的是一個(gè)與 key 對(duì)應(yīng)的數(shù)組,數(shù)組中每個(gè)元素都是一個(gè)對(duì)象,對(duì)象中包含了 key 對(duì)應(yīng)的值。
這些值都是相對(duì)于當(dāng)前窗口的 timeOrigin 時(shí)間點(diǎn)所經(jīng)過的時(shí)間長度(毫秒值)。

- window.performance.timeOrigin
獲取當(dāng)前窗口的 timeOrigin 時(shí)間點(diǎn)。對(duì)一個(gè)確定的窗口,timeOrigin 的值是一個(gè)定值。
window.performance.timeOrigin
< 1698808299815.6new Date(window.performance.timeOrigin)
< Wed Nov 01 2023 11:11:39 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)

以上就是JS瀏覽器的首屏白屏?xí)r間計(jì)算示例詳解的詳細(xì)內(nèi)容,更多關(guān)于JS瀏覽器首屏白屏?xí)r間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript使用Promise控制并發(fā)請(qǐng)求
當(dāng)我們需要同時(shí)處理多個(gè)請(qǐng)求時(shí),如何避免請(qǐng)求之間的沖突和混亂呢,這就是今天我們要探討的話題——如何使用Promise控制并發(fā)請(qǐng)求,感興趣的可以了解一下2023-06-06
uniapp多選框全選功能的實(shí)現(xiàn)思路與方法實(shí)例
uniapp給我們提供了tabs組件進(jìn)行單項(xiàng)的切換,但是多選的效果需要我們自己去手寫,下面這篇文章主要給大家介紹了關(guān)于uniapp多選框全選功能實(shí)現(xiàn)思路與方法的相關(guān)資料,需要的朋友可以參考下2022-08-08
一篇文章帶你學(xué)會(huì)JavaScript計(jì)時(shí)事件
JS可以實(shí)現(xiàn)很多java代碼不易完成的功能,下面這篇文章主要給大家介紹了關(guān)于如何通過一篇文章帶你學(xué)會(huì)JavaScript計(jì)時(shí)事件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
uni-app使用uploadFile上傳多張圖片的具體實(shí)現(xiàn)
在微信小程序中不支持多張圖片上傳,需要做循環(huán)實(shí)現(xiàn)多張圖片上傳,下面這篇文章主要給大家介紹了關(guān)于uni-app使用uploadFile上傳多張圖片的具體實(shí)現(xiàn),需要的朋友可以參考下2023-04-04
JavaScript之promise_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript之promise的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
layer.open 子頁面彈出層向父頁面?zhèn)鬏敂?shù)據(jù)的例子
今天小編就為大家分享一篇layer.open 子頁面彈出層向父頁面?zhèn)鬏敂?shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
JScript中的"this"關(guān)鍵字使用方式補(bǔ)充材料
JScript中的"this"關(guān)鍵字使用方式補(bǔ)充材料...2007-03-03
javascript原生封裝一個(gè)淡入淡出效果的函數(shù)測(cè)試實(shí)例代碼
這篇文章主要介紹了javascript原生封裝一個(gè)淡入淡出效果的函數(shù),主要有FadeIn淡入函數(shù)和FadeOut淡出函數(shù),需要的朋友可以參考下2018-03-03
Echarts圖表如何利用formatter自定義tooltip的內(nèi)容和樣式
這篇文章主要給大家介紹了關(guān)于Echarts圖表如何利用formatter自定義tooltip的內(nèi)容和樣式的相關(guān)資料,echarts的圖表配置非常的靈活自由,但是不熟悉的時(shí)候容易不知道怎么配置,需要的朋友可以參考下2023-06-06

