performanced的作用
Web Performance 接口允許網(wǎng)頁中的 JavaScript 代碼可以通過具體的函數(shù)(由 window 對象的 performance 屬性提供)測量當(dāng)前網(wǎng)頁頁面或者 web應(yīng)用的性能脖捻。它能提供高精度的時間戳阔逼,可以更加精準(zhǔn)的計算腳本運(yùn)行的時間。
瀏覽器兼容性
pc和移動端的主流瀏覽器都支持地沮。
API
1嗜浮、performance.timing(頁面整體的時間參數(shù))
performance對象的timing屬性指向一個對象,它包含了各種與瀏覽器性能有關(guān)的時間數(shù)據(jù)摩疑,提供瀏覽器處理網(wǎng)頁各個階段的耗時周伦。我們在chrome中輸入performance.timing就可以看到下面的數(shù)據(jù):
performance.timing的所有屬性都是只讀屬性:
navigationStart:是一個無符號long long 型的毫秒數(shù),表征了從同一個瀏覽器上下文的上一個文檔卸載(unload)結(jié)束時的UNIX時間戳未荒。如果沒有上一個文檔专挪,這個值會和PerformanceTiming.fetchStart相同。
unloadEventStart:是一個無符號long long 型的毫秒數(shù),表征了unload事件拋出時的UNIX時間戳。如果沒有前一個網(wǎng)頁毅哗,或者之前的網(wǎng)頁跳轉(zhuǎn)重定向不是在同一個域名內(nèi), 這個值會返回0.
unloadEventEnd:是一個無符號long long 型的毫秒數(shù),表征了unload事件處理完成時的UNIX時間戳迫卢。如果沒有前一個網(wǎng)頁,或者之前的網(wǎng)頁跳轉(zhuǎn)不是在同一個域名內(nèi)冶共, 這個值會返回0.
redirectStart:是一個無符號long long 型的毫秒數(shù)乾蛤,表征了第一個HTTP重定向開始時的UNIX時間戳。如果沒有重定向捅僵,或者重定向中的一個不同源家卖,這個值會返回0.
redirectEnd:是一個無符號long long 型的毫秒數(shù),表征了最后一個HTTP重定向完成時(也就是說是HTTP響應(yīng)的最后一個bite直接被收到的時間)的UNIX時間戳庙楚。如果沒有重定向上荡,或者重定向中的一個不同源,這個值會返回0.
fetchStart:是一個無符號long long 型的毫秒數(shù)馒闷,表征了瀏覽器準(zhǔn)備好使用HTTP請求來獲取(fetch)文檔的UNIX時間戳酪捡。這個時間點會在檢查任何應(yīng)用緩存之前叁征。
domainLookupStart:是一個無符號long long 型的毫秒數(shù),表征了域名查詢開始的UNIX時間戳逛薇。如果使用了持續(xù)連接(persistent connection)捺疼,或者這個信息存儲到了緩存或者本地資源上,這個值將和 PerformanceTiming.fetchStart一致永罚。
domainLookupEnd:是一個無符號long long 型的毫秒數(shù)帅涂,表征了域名查詢結(jié)束的UNIX時間戳。如果使用了持續(xù)連接(persistent connection)尤蛮,或者這個信息存儲到了緩存或者本地資源上,這個值將和 PerformanceTiming.fetchStart一致斯议。
connectStart:返回HTTP請求開始向服務(wù)器發(fā)送時的Unix毫秒時間戳产捞。如果使用持久連接(persistent connection),則返回值等同于fetchStart屬性的值哼御。
(secureConnectionStart):可選特性坯临。用戶代理如果沒有對應(yīng)的東東,就要把這個設(shè)置為undefined恋昼。如果有這個東東看靠,并且是HTTPS協(xié)議,那么就要返回開始SSL握手的那個時間液肌。 如果不是HTTPS挟炬, 那么就返回0
connectEnd:返回瀏覽器與服務(wù)器之間的連接建立時的Unix毫秒時間戳。如果建立的是持久連接嗦哆,則返回值等同于fetchStart屬性的值谤祖。連接建立指的是所有握手和認(rèn)證過程全部結(jié)束。
secureConnectionStart:返回瀏覽器與服務(wù)器開始安全鏈接的握手時的Unix毫秒時間戳老速。如果當(dāng)前網(wǎng)頁不要求安全連接粥喜,則返回0。
requestStart:返回瀏覽器向服務(wù)器發(fā)出HTTP請求時(或開始讀取本地緩存時)的Unix毫秒時間戳橘券。
responseStart:返回瀏覽器從服務(wù)器收到(或從本地緩存讀榷钕妗)第一個字節(jié)時的Unix毫秒時間戳。
responseEnd:返回用戶代理接收到最后一個字符的Unix毫秒時間戳旁舰,和當(dāng)前連接被關(guān)閉的時間中锋华,更早的那個。同樣箭窜,文檔可能來自服務(wù)器供置、緩存、或本地資源绽快。
domLoading:返回當(dāng)前網(wǎng)頁DOM結(jié)構(gòu)開始解析時(即Document.readyState屬性變?yōu)椤發(fā)oading”芥丧、相應(yīng)的readystatechange事件觸發(fā)時)的Unix毫秒時間戳紧阔。
domInteractive:返回當(dāng)前網(wǎng)頁DOM結(jié)構(gòu)結(jié)束解析、開始加載內(nèi)嵌資源時(即Document.readyState屬性變?yōu)椤癷nteractive”续担、相應(yīng)的readystatechange事件觸發(fā)時)的Unix毫秒時間戳擅耽。
domContentLoadedEventStart:返回當(dāng)前網(wǎng)頁DOMContentLoaded事件發(fā)生時(即DOM結(jié)構(gòu)解析完畢、所有腳本開始運(yùn)行時)的Unix毫秒時間戳物遇。
domContentLoadedEventEnd:返回當(dāng)前網(wǎng)頁所有需要執(zhí)行的腳本執(zhí)行完成時的Unix毫秒時間戳乖仇。
domComplete:返回當(dāng)前網(wǎng)頁DOM結(jié)構(gòu)生成時(即Document.readyState屬性變?yōu)椤癱omplete”,以及相應(yīng)的readystatechange事件發(fā)生時)的Unix毫秒時間戳询兴。
loadEventStart:返回當(dāng)前網(wǎng)頁load事件的回調(diào)函數(shù)開始時的Unix毫秒時間戳乃沙。如果該事件還沒有發(fā)生,返回0诗舰。
loadEventEnd:返回當(dāng)前網(wǎng)頁load事件的回調(diào)函數(shù)運(yùn)行結(jié)束時的Unix毫秒時間戳警儒。如果該事件還沒有發(fā)生,返回0眶根。
根據(jù)上面這些屬性蜀铲,可以計算出網(wǎng)頁加載各個階段的耗時,對我們比較有用的頁面性能數(shù)據(jù)大概包括如下幾個:
DNS查詢耗時 :domainLookupEnd - domainLookupStart
TCP鏈接耗時 :connectEnd - connectStart
request請求耗時 :responseEnd - responseStart
解析dom樹耗時 : domComplete - domInteractive
白屏?xí)r間 :responseStart - navigationStart
domready時間 :domContentLoadedEventEnd - navigationStart
onload時間 :loadEventEnd - navigationStart
2属百、performance.getEntries()
在chrome中輸入performance.getEntries()可以得到靜態(tài)資源的數(shù)組列表:
這個接口是獲取所有資源文件的方法记劝,該API還提供了另外兩個接口:
performance.getEntriesByName(name) 根據(jù)資源的name獲取相應(yīng)的數(shù)據(jù)(如上圖中的name)
performance.getEntriesByType(entryType) 根據(jù)資源的name獲取相應(yīng)的數(shù)據(jù)(如上圖中的entryType)
3、performance.navigation
在chrome中輸入performance.navigation:
這個對象有兩個屬性:
performance.navigation.type(該屬性返回一個整數(shù)值族扰,表示網(wǎng)頁的加載來源厌丑,可能有以下4種情況):
0:網(wǎng)頁通過點擊鏈接、地址欄輸入渔呵、表單提交蹄衷、腳本操作等方式加載,相當(dāng)于常數(shù)performance.navigation.TYPE_NAVIGATE厘肮。
1:網(wǎng)頁通過“重新加載”按鈕或者location.reload()方法加載愧口,相當(dāng)于常數(shù)performance.navigation.TYPE_RELOAD。
2:網(wǎng)頁通過“前進(jìn)”或“后退”按鈕加載类茂,相當(dāng)于常數(shù)performance.navigation.TYPE_BACK_FORWARD耍属。
255:任何其他來源的加載,相當(dāng)于常數(shù)performance.navigation.TYPE_RESERVED巩检。
performance.navigation.redirectCount:表示網(wǎng)頁經(jīng)過重定向的次數(shù)厚骗。
4、performance.memory
memory: {
usedJSHeapSize: 16100000, // JS 對象(包括V8引擎內(nèi)部對象)占用的內(nèi)存兢哭,一定小于 totalJSHeapSize领舰,否則可能出現(xiàn)內(nèi)存泄漏
totalJSHeapSize: 35100000, // 可使用的內(nèi)存
jsHeapSizeLimit: 793000000 // 內(nèi)存大小限制
},
5、performance.now()
performance.now方法返回當(dāng)前網(wǎng)頁自從performance.timing.navigationStart到當(dāng)前時間之間的微秒數(shù)。
6冲秽、performance.mark()
mark方法用于為相應(yīng)的視點做標(biāo)記舍咖。對應(yīng)的方法有 performance.clearMarks()。
相關(guān)資料
1 https://developer.mozilla.org/zh-CN/docs/Web/API/Performance
2 http://javascript.ruanyifeng.com/bom/performance.html#toc5