window.performance

performanced的作用

Web Performance 接口允許網頁中的 JavaScript 代碼可以通過具體的函數(由 window 對象的 performance 屬性提供)測量當前網頁頁面或者 web應用的性能。它能提供高精度的時間戳,可以更加精準的計算腳本運行的時間。

瀏覽器兼容性

pc和移動端的主流瀏覽器都支持。

API
1、performance.timing(頁面整體的時間參數)

performance對象的timing屬性指向一個對象,它包含了各種與瀏覽器性能有關的時間數據,提供瀏覽器處理網頁各個階段的耗時。我們在chrome中輸入performance.timing就可以看到下面的數據:

控制臺輸出的performance.timing

performance.timing的所有屬性都是只讀屬性:

navigationStart:是一個無符號long long 型的毫秒數,表征了從同一個瀏覽器上下文的上一個文檔卸載(unload)結束時的UNIX時間戳。如果沒有上一個文檔,這個值會和PerformanceTiming.fetchStart相同。
unloadEventStart:是一個無符號long long 型的毫秒數,表征了unload事件拋出時的UNIX時間戳。如果沒有前一個網頁,或者之前的網頁跳轉重定向不是在同一個域名內, 這個值會返回0.
unloadEventEnd:是一個無符號long long 型的毫秒數,表征了unload事件處理完成時的UNIX時間戳。如果沒有前一個網頁,或者之前的網頁跳轉不是在同一個域名內, 這個值會返回0.
redirectStart:是一個無符號long long 型的毫秒數,表征了第一個HTTP重定向開始時的UNIX時間戳。如果沒有重定向,或者重定向中的一個不同源,這個值會返回0.
redirectEnd:是一個無符號long long 型的毫秒數,表征了最后一個HTTP重定向完成時(也就是說是HTTP響應的最后一個bite直接被收到的時間)的UNIX時間戳。如果沒有重定向,或者重定向中的一個不同源,這個值會返回0.
fetchStart:是一個無符號long long 型的毫秒數,表征了瀏覽器準備好使用HTTP請求來獲取(fetch)文檔的UNIX時間戳。這個時間點會在檢查任何應用緩存之前。
domainLookupStart:是一個無符號long long 型的毫秒數,表征了域名查詢開始的UNIX時間戳。如果使用了持續連接(persistent connection),或者這個信息存儲到了緩存或者本地資源上,這個值將和 PerformanceTiming.fetchStart一致。
domainLookupEnd:是一個無符號long long 型的毫秒數,表征了域名查詢結束的UNIX時間戳。如果使用了持續連接(persistent connection),或者這個信息存儲到了緩存或者本地資源上,這個值將和 PerformanceTiming.fetchStart一致。
connectStart:返回HTTP請求開始向服務器發送時的Unix毫秒時間戳。如果使用持久連接(persistent connection),則返回值等同于fetchStart屬性的值。
(secureConnectionStart):可選特性。用戶代理如果沒有對應的東東,就要把這個設置為undefined。如果有這個東東,并且是HTTPS協議,那么就要返回開始SSL握手的那個時間。 如果不是HTTPS, 那么就返回0
connectEnd:返回瀏覽器與服務器之間的連接建立時的Unix毫秒時間戳。如果建立的是持久連接,則返回值等同于fetchStart屬性的值。連接建立指的是所有握手和認證過程全部結束。
secureConnectionStart:返回瀏覽器與服務器開始安全鏈接的握手時的Unix毫秒時間戳。如果當前網頁不要求安全連接,則返回0。
requestStart:返回瀏覽器向服務器發出HTTP請求時(或開始讀取本地緩存時)的Unix毫秒時間戳。
responseStart:返回瀏覽器從服務器收到(或從本地緩存讀取)第一個字節時的Unix毫秒時間戳。
responseEnd:返回用戶代理接收到最后一個字符的Unix毫秒時間戳,和當前連接被關閉的時間中,更早的那個。同樣,文檔可能來自服務器、緩存、或本地資源。
domLoading:返回當前網頁DOM結構開始解析時(即Document.readyState屬性變為“loading”、相應的readystatechange事件觸發時)的Unix毫秒時間戳。
domInteractive:返回當前網頁DOM結構結束解析、開始加載內嵌資源時(即Document.readyState屬性變為“interactive”、相應的readystatechange事件觸發時)的Unix毫秒時間戳。
domContentLoadedEventStart:返回當前網頁DOMContentLoaded事件發生時(即DOM結構解析完畢、所有腳本開始運行時)的Unix毫秒時間戳。
domContentLoadedEventEnd:返回當前網頁所有需要執行的腳本執行完成時的Unix毫秒時間戳。
domComplete:返回當前網頁DOM結構生成時(即Document.readyState屬性變為“complete”,以及相應的readystatechange事件發生時)的Unix毫秒時間戳。
loadEventStart:返回當前網頁load事件的回調函數開始時的Unix毫秒時間戳。如果該事件還沒有發生,返回0。
loadEventEnd:返回當前網頁load事件的回調函數運行結束時的Unix毫秒時間戳。如果該事件還沒有發生,返回0。

根據上面這些屬性,可以計算出網頁加載各個階段的耗時,對我們比較有用的頁面性能數據大概包括如下幾個:

DNS查詢耗時 :domainLookupEnd - domainLookupStart
TCP鏈接耗時 :connectEnd - connectStart
request請求耗時 :responseEnd - responseStart
解析dom樹耗時 : domComplete - domInteractive
白屏時間 :responseStart - navigationStart
domready時間 :domContentLoadedEventEnd - navigationStart
onload時間 :loadEventEnd - navigationStart
2、performance.getEntries()

在chrome中輸入performance.getEntries()可以得到靜態資源的數組列表:

performance.getEntries()得到的資源文件加載數據列表

這個接口是獲取所有資源文件的方法,該API還提供了另外兩個接口:

performance.getEntriesByName(name) 根據資源的name獲取相應的數據(如上圖中的name)
performance.getEntriesByType(entryType) 根據資源的name獲取相應的數據(如上圖中的entryType)
3、performance.navigation

在chrome中輸入performance.navigation:


performance.navigation

這個對象有兩個屬性:
  performance.navigation.type(該屬性返回一個整數值,表示網頁的加載來源,可能有以下4種情況):
  0:網頁通過點擊鏈接、地址欄輸入、表單提交、腳本操作等方式加載,相當于常數performance.navigation.TYPE_NAVIGATE。
  1:網頁通過“重新加載”按鈕或者location.reload()方法加載,相當于常數performance.navigation.TYPE_RELOAD。
  2:網頁通過“前進”或“后退”按鈕加載,相當于常數performance.navigation.TYPE_BACK_FORWARD。
  255:任何其他來源的加載,相當于常數performance.navigation.TYPE_RESERVED。
 performance.navigation.redirectCount:表示網頁經過重定向的次數。

4、performance.memory
performance.memory
 memory: {
    usedJSHeapSize:  16100000, // JS 對象(包括V8引擎內部對象)占用的內存,一定小于 totalJSHeapSize,否則可能出現內存泄漏
    totalJSHeapSize: 35100000, // 可使用的內存
    jsHeapSizeLimit: 793000000 // 內存大小限制
},
5、performance.now()

performance.now方法返回當前網頁自從performance.timing.navigationStart到當前時間之間的微秒數。

6、performance.mark()

mark方法用于為相應的視點做標記。對應的方法有 performance.clearMarks()。

相關資料
1 https://developer.mozilla.org/zh-CN/docs/Web/API/Performance
2 http://javascript.ruanyifeng.com/bom/performance.html#toc5

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • window.performance是W3C性能小組引入的新的API,允許網頁訪問某些函數來測量網頁和Web應用程...
    _ihhu閱讀 2,223評論 0 0
  • 問題背景:打開瀏覽器之后,打開某網站首頁,在console里輸入 希望得到頁面內所有資源文件的加載時間。 然后將r...
    stois閱讀 478評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,132評論 25 708
  • 筆記參考自《響應式Web設計:HTML5和CSS3實踐》,2013年出版內容說不上最新。如下是全書的章的目錄:第 ...
    于曉魚閱讀 947評論 0 1
  • 中國股市政策的制定,是以鞏固和加強黨的領導為出發點的,這是股市政策風險的根源。保持政權的穩定,是黨和政府的“大局”...
    會逃跑的小偷閱讀 76評論 0 0