## Performance API 高精度時間戳
PerFormance API是ECMAScript 5才引入的,它的精度可達到1毫秒的千分之一。
目前,所有主要瀏覽器都已經支持`performance`對象,包括Chrome 20+、Firefox 15+、IE 10+、Opera 15+。
**1.1 performance.timing對象**
`performance`對象是全局的,它的`timing`屬性是一個對象,它包含了各種與瀏覽器性能有關的時間數據,提供瀏覽器處理網頁各個階段的耗時。
`performance.timing`對象包含下列屬性(全部只讀):
```
navigationStart:當前瀏覽器窗口的前一個網頁關閉,發生unload事件時的Unix毫秒時間戳。如果沒有前一個網頁,則等于fetchStart屬性。
unloadEventStart:如果前一個網頁與當前網頁屬于同一個域名,則返回前一個網頁的unload事件發生時的Unix毫秒時間戳。如果沒有前一個網頁,或者之前的網頁跳轉不是在同一個域名內,則返回值為0。
unloadEventEnd:如果前一個網頁與當前網頁屬于同一個域名,則返回前一個網頁unload事件的回調函數結束時的Unix毫秒時間戳。如果沒有前一個網頁,或者之前的網頁跳轉不是在同一個域名內,則返回值為0。
redirectStart:返回第一個HTTP跳轉開始時的Unix毫秒時間戳。如果沒有跳轉,或者不是同一個域名內部的跳轉,則返回值為0。
redirectEnd:返回最后一個HTTP跳轉結束時(即跳轉回應的最后一個字節接受完成時)的Unix毫秒時間戳。如果沒有跳轉,或者不是同一個域名內部的跳轉,則返回值為0。
fetchStart:返回瀏覽器準備使用HTTP請求讀取文檔時的Unix毫秒時間戳。該事件在網頁查詢本地緩存之前發生。
domainLookupStart:返回域名查詢開始時的Unix毫秒時間戳。如果使用持久連接,或者信息是從本地緩存獲取的,則返回值等同于fetchStart屬性的值。
domainLookupEnd:返回域名查詢結束時的Unix毫秒時間戳。如果使用持久連接,或者信息是從本地緩存獲取的,則返回值等同于fetchStart屬性的值。
connectStart:返回HTTP請求開始向服務器發送時的Unix毫秒時間戳。如果使用持久連接(persistent connection),則返回值等同于fetchStart屬性的值。
connectEnd:返回瀏覽器與服務器之間的連接建立時的Unix毫秒時間戳。如果建立的是持久連接,則返回值等同于fetchStart屬性的值。連接建立指的是所有握手和認證過程全部結束。
secureConnectionStart:返回瀏覽器與服務器開始安全鏈接的握手時的Unix毫秒時間戳。如果當前網頁不要求安全連接,則返回0。
requestStart:返回瀏覽器向服務器發出HTTP請求時(或開始讀取本地緩存時)的Unix毫秒時間戳。
responseStart:返回瀏覽器從服務器收到(或從本地緩存讀取)第一個字節時的Unix毫秒時間戳。
responseEnd:返回瀏覽器從服務器收到(或從本地緩存讀取)最后一個字節時(如果在此之前HTTP連接已經關閉,則返回關閉時)的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。
```
**1.2 performance中的方法**
**(1)performance.now()**
`performance.now`方法返回當前網頁自從`performance.timing.navigationStart`到當前時間之間的微秒數(毫秒的千分之一)。也就是說,它的精度可以達到100萬分之一秒。
**(2)performance.mark()**
mark方法用于為相應的視點做標記。
clearMarks方法用于清除標記,如果不加參數,就表示清除所有標記。
**(3)performance.getEntries()**
瀏覽器獲取網頁時,會對網頁中每一個對象(腳本文件、樣式表、圖片文件等等)發出一個HTTP請求。`performance.getEntries`方法以數組形式,返回這些請求的時間統計信息,有多少個請求,返回數組就會有多少個成員。
**1.3 performance.navigation對象**
除了時間信息,performance還可以提供一些用戶行為信息,主要都存放在performance.navigation對象上面。
它有兩個屬性:
**(1)performance.navigation.type**
該屬性返回一個整數值,表示網頁的加載來源,可能有以下4種情況:
```
0:網頁通過點擊鏈接、地址欄輸入、表單提交、腳本操作等方式加載,相當于常數performance.navigation.TYPE_NAVIGATENEXT。
1:網頁通過“重新加載”按鈕或者location.reload()方法加載,相當于常數performance.navigation.TYPE_RELOAD。
2:網頁通過“前進”或“后退”按鈕加載,相當于常數performance.navigation.TYPE_BACK_FORWARD。
255:任何其他來源的加載,相當于常數performance.navigation.TYPE_UNDEFINED。
```
**(2)performance.navigation.redirectCount**
該屬性表示當前網頁經過了多少次重定向跳轉。
- 前言
- JavaScript簡介
- 基本概念
- 語法
- 數據類型
- 運算符
- 表達式
- 語句
- 對象
- 數組
- 函數
- 引用類型(對象)
- Object對象
- Array對象
- Date對象
- RegExp對象
- 基本包裝類型(Boolean、Number、String)
- 單體內置對象(Global、Math)
- console對象
- DOM
- DOM-屬性和CSS
- BOM
- Event 事件
- 正則表達式
- JSON
- AJAX
- 表單和富文本編輯器
- 表單
- 富文本編輯器
- canvas
- 離線應用
- 客戶端存儲(Cookie、Storage、IndexedDB)
- HTML5 API
- Video/Audio
- Geolocation API
- requestAnimationFrame
- File API
- FullScreen API
- IndexedDB
- 檢測設備方向
- Blob
- vibrate
- Luminosity API
- WebRTC
- Page Visibility API
- Performance API
- Web Speech
- Notification
- 面向對象的程序設計
- 概述
- this關鍵字
- 原型鏈
- 作用域
- 常用API合集
- SVG
- 錯誤處理機制
- JavaScript開發技巧合集
- 編程風格
- 垃圾回收機制