成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Navigation Timing獲取頁(yè)面加載各個(gè)階段所需時(shí)間

luzhuqun / 2565人閱讀

摘要:之前測(cè)試頁(yè)面加載的時(shí)間都是在相應(yīng)的位置打,通過(guò)計(jì)算時(shí)間差來(lái)實(shí)現(xiàn)。見(jiàn)下圖不僅幫我們省去了繁瑣的手動(dòng)打點(diǎn)的操作,而且提供了以前我們無(wú)法獲取到的數(shù)據(jù),比如和連接所需的時(shí)間。如果沒(méi)有發(fā)起請(qǐng)求,同上開(kāi)始建立請(qǐng)求的時(shí)間。

原文鏈接

起因

最近接觸到了一個(gè)性能優(yōu)化方面為我們提供精準(zhǔn)數(shù)據(jù)的工具,Navigation Timing,本想從網(wǎng)上獲取他更詳細(xì)的信息,但搜索到的內(nèi)容絕大部分都是國(guó)外的文章,遂決定寫一遍具體分析的文章。

之前測(cè)試頁(yè)面加載的時(shí)間都是在相應(yīng)的位置打Date.now(),通過(guò)計(jì)算時(shí)間差來(lái)實(shí)現(xiàn)。這樣的做法有很多弊端。

需要在許多地方添加額外的代碼

記錄的時(shí)間不準(zhǔn)確

測(cè)試完之后需要找到每一個(gè)地方注釋or刪除,容易落下且麻煩

W3C Web Performance Working Group 引入了 Navigation Timing API 幫我們自動(dòng),精準(zhǔn)的實(shí)現(xiàn)了性能測(cè)試的打點(diǎn)問(wèn)題。

Navigation Timing API 用法

用法很簡(jiǎn)單,在頁(yè)面load完之后我們可以從performance.timing對(duì)象中拿到我們需要的所有數(shù)據(jù)。見(jiàn)下圖:

Navigation Timing不僅幫我們省去了繁瑣的手動(dòng)打點(diǎn)的操作,而且提供了以前我們無(wú)法獲取到的數(shù)據(jù),比如DNS和TCP連接所需的時(shí)間。

里面提供的具體事件如下圖:

參數(shù)說(shuō)明

具體文字說(shuō)明:

navigationStart
加載起始時(shí)間

redirectStart
重定向開(kāi)始時(shí)間(如果發(fā)生了HTTP重定向,每次重定向都和當(dāng)前文檔同域的話,就返回開(kāi)始重定向的fetchStart的值。其他情況,則返回0)

redirectEnd
重定向結(jié)束時(shí)間(如果發(fā)生了HTTP重定向,每次重定向都和當(dāng)前文檔同域的話,就返回最后一次重定向接受完數(shù)據(jù)的時(shí)間。其他情況則返回0)

fetchStart
瀏覽器發(fā)起資源請(qǐng)求時(shí),如果有緩存,則返回讀取緩存的開(kāi)始時(shí)間

domainLookupStart
查詢DNS的開(kāi)始時(shí)間。如果請(qǐng)求沒(méi)有發(fā)起DNS請(qǐng)求,如keep-alive,緩存等,則返回fetchStart

domainLookupEnd
查詢DNS的結(jié)束時(shí)間。如果沒(méi)有發(fā)起DNS請(qǐng)求,同上

connectStart
開(kāi)始建立TCP請(qǐng)求的時(shí)間。如果請(qǐng)求是keep-alive,緩存等,則返回domainLookupEnd

(secureConnectionStart)
如果在進(jìn)行TLS或SSL,則返回握手時(shí)間

connectEnd
完成TCP鏈接的時(shí)間。如果是keep-alive,緩存等,同connectStart

requestStart
發(fā)起請(qǐng)求的時(shí)間

responseStart
服務(wù)器開(kāi)始響應(yīng)的時(shí)間

domLoading
從圖中看是開(kāi)始渲染dom的時(shí)間,具體未知

domInteractive
未知

domContentLoadedEventStart
開(kāi)始觸發(fā)DomContentLoadedEvent事件的時(shí)間

domContentLoadedEventEnd
DomContentLoadedEvent事件結(jié)束的時(shí)間

domComplete
從圖中看是dom渲染完成時(shí)間,具體未知

loadEventStart
觸發(fā)load的時(shí)間,如沒(méi)有則返回0

loadEventEnd
load事件執(zhí)行完的時(shí)間,如沒(méi)有則返回0

unloadEventStart
unload事件觸發(fā)的時(shí)間

unloadEventEnd
unload事件執(zhí)行完的時(shí)間

注,從domLoading開(kāi)始往下的參數(shù)chrome官網(wǎng)并未給出具體英文解釋,只是猜測(cè),如有錯(cuò)誤,歡迎糾正。

附上官方鏈接

簡(jiǎn)單用法

這些參數(shù)已經(jīng)非常詳細(xì),也很精準(zhǔn),稍作處理就可以得出我們需要的一些關(guān)鍵數(shù)字,如:

DNS解析時(shí)間: domainLookupEnd - domainLookupStart

TCP建立連接時(shí)間: connectEnd - connectStart

白屏?xí)r間: responseStart - navigationStart

dom渲染完成時(shí)間: domContentLoadedEventEnd - navigationStart

頁(yè)面onload時(shí)間: loadEventEnd - navigationStart

demo如下:

let timing = performance.timing,
     start = timing.navigationStart,
     dnsTime = 0,
     tcpTime = 0,
     firstPaintTime = 0,
     domRenderTime = 0,
     loadTime = 0;

dnsTime = timing.domainLookupEnd - timing.domainLookupStart;
tcpTime = timing.connectEnd - timing.connectStart;
firstPaintTime = timing.responseStart - start;
domRenderTime = timing.domContentLoadedEventEnd - start;
loadTime = timing.loadEventEnd - start;

console.log("DNS解析時(shí)間:", dnsTime , "
TCP建立時(shí)間:", tcpTime, "
首屏?xí)r間:", firstPaintTime,
 "
dom渲染完成時(shí)間:", domRenderTime, "
頁(yè)面onload時(shí)間:", loadTime);

效果如下:

兼容性

目前Navigation Timing已經(jīng)普及,絕大部分主流瀏覽器都已經(jīng)支持

那么,開(kāi)始優(yōu)化你的app吧

3Fuyu

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84064.html

相關(guān)文章

  • 使用性能API快速分析web前端性能

    摘要:性能時(shí)間線以一個(gè)統(tǒng)一的接口獲取由和所收集的性能數(shù)據(jù)。瀏覽器支持下表列舉了當(dāng)前主流瀏覽器對(duì)性能的支持,其中標(biāo)注星號(hào)的內(nèi)容并非來(lái)自于性能工作小組。 頁(yè)面的性能問(wèn)題一直是產(chǎn)品開(kāi)發(fā)過(guò)程中的重要一環(huán),很多公司也一直在使用各種方式監(jiān)控產(chǎn)品的頁(yè)面性能。從控制臺(tái)工具、Fiddler抓包工具,到使用DOMContentLoaded和document.onreadystatechange這種侵入式j(luò)ava...

    mj 評(píng)論0 收藏0
  • 上報(bào)相關(guān)performance對(duì)象初略介紹

    摘要:概述最近在做一個(gè)上報(bào)相關(guān)的需求,該需求指定上班的內(nèi)容中包含頁(yè)面記載的事件請(qǐng)求花費(fèi)的事件以及渲染所要完成的時(shí)間等。網(wǎng)頁(yè)導(dǎo)航的相關(guān)對(duì)象。瀏覽器內(nèi)存情況相關(guān)對(duì)象。 概述 最近在做一個(gè)上報(bào)相關(guān)的需求,該需求指定上班的內(nèi)容中包含頁(yè)面記載的事件、請(qǐng)求花費(fèi)的事件、以及DOM渲染所要完成的時(shí)間等。 為此查閱了大量的文檔,收集了很多資料,所以趁熱打鐵,把自己所了解的記錄下來(lái),方便以后查詢。 perf...

    junbaor 評(píng)論0 收藏0
  • 記錄使用Performance API遇到的問(wèn)題

    摘要:記錄使用遇到的問(wèn)題本文中指的是。上線了以后拿到的首批數(shù)據(jù)中,后端時(shí)間計(jì)算出來(lái)竟然有負(fù)值,尤其在設(shè)備下,苦苦尋找原因,終于發(fā)現(xiàn)問(wèn)題所在。如果事件沒(méi)有觸發(fā),那么該接口就返回文檔觸發(fā)事件結(jié)束后的時(shí)間。 記錄使用Performance API遇到的問(wèn)題 本文中Performance API指的是Navigation Timing API。這并不是一篇Navigation Timing API的...

    JerryWangSAP 評(píng)論0 收藏0
  • 前端網(wǎng)頁(yè)加載渲染鏈路優(yōu)化

    摘要:所以,關(guān)于優(yōu)化實(shí)戰(zhàn)我們主要分為兩部分加載渲染鏈路優(yōu)化和編程代碼優(yōu)化。加載渲染鏈路優(yōu)化從訪問(wèn)到頁(yè)面呈現(xiàn),整個(gè)鏈路可以做優(yōu)化的思路。資源緩存這一節(jié)我們單獨(dú)介紹緩存,是的,利用好緩存可以解決很多問(wèn)題,包括頁(yè)面加載和渲染的問(wèn)題都能得到很好的優(yōu)化。 優(yōu)化實(shí)戰(zhàn) 本文屬于思否課堂VirtualDOM到AST玩轉(zhuǎn)前端性能原理解析與代碼實(shí)戰(zhàn)課程官方博客:fed123.com 我們已經(jīng)全面分析總結(jié)了評(píng)估頁(yè)...

    zhaofeihao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<