window.performance
是W3C性能小組引入的新的API间影,允許網(wǎng)頁訪問某些函數(shù)來測量網(wǎng)頁和Web應用程序的性能,包括Navigation Timing API和高分辨率時間數(shù)據(jù)。
目前IE9以上的瀏覽器都支持。
一個performance對象的完整結構如下圖所示:
詳見下述說明:
// 獲取 performance 數(shù)據(jù)
var performance = {
// memory 是非標準屬性穷缤,只在 Chrome 有
// 財富問題:我有多少內(nèi)存
memory: {
usedJSHeapSize: 16100000, // JS 對象(包括V8引擎內(nèi)部對象)占用的內(nèi)存,一定小于 totalJSHeapSize
totalJSHeapSize: 35100000, // 可使用的內(nèi)存
jsHeapSizeLimit: 793000000 // 內(nèi)存大小限制
},
// 哲學問題:我從哪里來箩兽?
navigation: {
redirectCount: 0, // 如果有重定向的話津肛,頁面通過幾次重定向跳轉而來
type: 0 // 0 即 TYPE_NAVIGATENEXT 正常進入的頁面(非刷新、非重定向等)
// 1 即 TYPE_RELOAD 通過 window.location.reload() 刷新的頁面
// 2 即 TYPE_BACK_FORWARD 通過瀏覽器的前進后退按鈕進入的頁面(歷史記錄)
// 255 即 TYPE_UNDEFINED 非以上方式進入的頁面
},
timing: {
// 在同一個瀏覽器上下文中汗贫,前一個網(wǎng)頁(與當前頁面不一定同域)unload 的時間戳身坐,如果無前一個網(wǎng)頁 unload ,則與 fetchStart 值相等
navigationStart: 1441112691935,
// 前一個網(wǎng)頁(與當前頁面同域)unload 的時間戳落包,如果無前一個網(wǎng)頁 unload 或者前一個網(wǎng)頁與當前頁面不同域部蛇,則值為 0
unloadEventStart: 0,
// 和 unloadEventStart 相對應,返回前一個網(wǎng)頁 unload 事件綁定的回調(diào)函數(shù)執(zhí)行完畢的時間戳
unloadEventEnd: 0,
// 第一個 HTTP 重定向發(fā)生時的時間咐蝇。有跳轉且是同域名內(nèi)的重定向才算涯鲁,否則值為 0
redirectStart: 0,
// 最后一個 HTTP 重定向完成時的時間。有跳轉且是同域名內(nèi)部的重定向才算有序,否則值為 0
redirectEnd: 0,
// 瀏覽器準備好使用 HTTP 請求抓取文檔的時間抹腿,這發(fā)生在檢查本地緩存之前
fetchStart: 1441112692155,
// DNS 域名查詢開始的時間,如果使用了本地緩存(即無 DNS 查詢)或持久連接旭寿,則與 fetchStart 值相等
domainLookupStart: 1441112692155,
// DNS 域名查詢完成的時間警绩,如果使用了本地緩存(即無 DNS 查詢)或持久連接,則與 fetchStart 值相等
domainLookupEnd: 1441112692155,
// HTTP(TCP) 開始建立連接的時間盅称,如果是持久連接肩祥,則與 fetchStart 值相等
// 注意如果在傳輸層發(fā)生了錯誤且重新建立連接,則這里顯示的是新建立的連接開始的時間
connectStart: 1441112692155,
// HTTP(TCP) 完成建立連接的時間(完成握手)缩膝,如果是持久連接混狠,則與 fetchStart 值相等
// 注意如果在傳輸層發(fā)生了錯誤且重新建立連接,則這里顯示的是新建立的連接完成的時間
// 注意這里握手結束逞盆,包括安全連接建立完成檀蹋、SOCKS 授權通過
connectEnd: 1441112692155,
// HTTPS 連接開始的時間,如果不是安全連接,則值為 0
secureConnectionStart: 0,
// HTTP 請求讀取真實文檔開始的時間(完成建立連接)俯逾,包括從本地讀取緩存
// 連接錯誤重連時贸桶,這里顯示的也是新建立連接的時間
requestStart: 1441112692158,
// HTTP 開始接收響應的時間(獲取到第一個字節(jié)),包括從本地讀取緩存
responseStart: 1441112692686,
// HTTP 響應全部接收完成的時間(獲取到最后一個字節(jié))桌肴,包括從本地讀取緩存
responseEnd: 1441112692687,
// 開始解析渲染 DOM 樹的時間皇筛,此時 Document.readyState 變?yōu)?loading,并將拋出 readystatechange 相關事件
domLoading: 1441112692690,
// 完成解析 DOM 樹的時間坠七,Document.readyState 變?yōu)?interactive水醋,并將拋出 readystatechange 相關事件
// 注意只是 DOM 樹解析完成,這時候并沒有開始加載網(wǎng)頁內(nèi)的資源
domInteractive: 1441112693093,
// DOM 解析完成后彪置,網(wǎng)頁內(nèi)資源加載開始的時間
// 在 DOMContentLoaded 事件拋出前發(fā)生
domContentLoadedEventStart: 1441112693093,
// DOM 解析完成后拄踪,網(wǎng)頁內(nèi)資源加載完成的時間(如 JS 腳本加載執(zhí)行完畢)
domContentLoadedEventEnd: 1441112693101,
// DOM 樹解析完成,且資源也準備就緒的時間拳魁,Document.readyState 變?yōu)?complete惶桐,并將拋出 readystatechange 相關事件
domComplete: 1441112693214,
// load 事件發(fā)送給文檔,也即 load 回調(diào)函數(shù)開始執(zhí)行的時間
// 注意如果沒有綁定 load 事件潘懊,值為 0
loadEventStart: 1441112693214,
// load 事件的回調(diào)函數(shù)執(zhí)行完畢的時間
loadEventEnd: 1441112693215
}
};