JS瀏覽器的首屏白屏?xí)r間計(jì)算示例詳解
首屏?xí)r間 白屏?xí)r間簡(jiǎn)介
首屏?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 (中國(guó)標(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í)間長(zhǎng)度(毫秒值)。

- 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 (中國(guó)標(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)文章
js導(dǎo)出excel文件的簡(jiǎn)潔方法(推薦)
下面小編就為帶來一篇js導(dǎo)出excel文件的簡(jiǎn)潔方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
JavaScript實(shí)現(xiàn)簡(jiǎn)易聊天對(duì)話框(加滾動(dòng)條)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)易聊天對(duì)話框,附加滾動(dòng)條功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
koa2服務(wù)端使用jwt進(jìn)行鑒權(quán)及路由權(quán)限分發(fā)的流程分析
這篇文章主要介紹了koa2服務(wù)端使用jwt進(jìn)行鑒權(quán)及路由權(quán)限分發(fā) ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
ExtJs使用自定義插件動(dòng)態(tài)保存表頭配置(隱藏或顯示)
這篇文章主要介紹了ExtJs使用自定義插件動(dòng)態(tài)保存表頭配置(隱藏或顯示) ,需要的朋友可以參考下2018-09-09
詳解微信圖片防盜鏈“此圖片來自微信公眾平臺(tái) 未經(jīng)允許不得引用”的解決方案
這篇文章主要介紹了詳解微信圖片防盜鏈“此圖片來自微信公眾平臺(tái) 未經(jīng)允許不得引用”的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
kindeditor編輯器點(diǎn)中圖片滾動(dòng)條往上頂?shù)腷ug
這篇文章主要介紹了kindeditor編輯器點(diǎn)中圖片滾動(dòng)條往上頂?shù)腷ug的相關(guān)資料,需要的朋友可以參考下2015-07-07
js change,propertychange,input事件小議
github上關(guān)于mootools一個(gè)issue的討論很有意思,所以就想測(cè)試記錄下。感興趣的可以點(diǎn)擊原頁面看看2011-12-12
關(guān)于js二維數(shù)組和多維數(shù)組的定義聲明(詳解)
下面小編就為大家?guī)硪黄P(guān)于js二維數(shù)組和多維數(shù)組的定義聲明(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10

