初探 performance – 監控網頁與程序性能

使用 window.performance 提供了一組精確的數據,通過簡單的計算就能得出一些網頁性能數據。css

配合上報一些客戶端瀏覽器的設備類型等數據,就能夠實現簡單的統計啦!git

額,先看下兼容性如何:http://caniuse.com/#feat=nav-timinggithub

這篇文章中 Demo 的運行環境爲最新的 Chrome 的控制檯,若是你用的是其餘瀏覽器,自查兼容性哈~segmentfault

先來看看在 Chrome 瀏覽器控制檯中執行 window.performance 會出現什麼:數組

簡單解釋下 performance 中的屬性:

先看下一個請求發出的整個過程當中,各類環節的時間順序:瀏覽器

具體的含義都在註釋裏說明了,接下來咱們看下能用這些數據作什麼?緩存

使用 performance.timing 信息簡單計算出網頁性能數據

在註釋中,我用【重要】標註了我我的認爲比較有用的數據,用【緣由】標註了爲啥要重點關注這個數據安全

 使用performance.getEntries() 獲取全部資源請求的時間數據

這個函數返回的將是一個數組,包含了頁面中全部的 HTTP 請求,這裏拿第一個請求 window.performance.getEntries()[0] 舉例。 注意 HTTP 請求有可能命中本地緩存,因此請求響應的間隔將很是短 能夠看到,與 performance.timing 對比: 沒有與 DOM 相關的屬性:app

  • navigationStart
  • unloadEventStart
  • unloadEventEnd
  • domLoading
  • domInteractive
  • domContentLoadedEventStart
  • domContentLoadedEventEnd
  • domComplete
  • loadEventStart
  • loadEventEnd

新增屬性:dom

  • name
  • entryType
  • initiatorType
  • duration

與 window.performance.timing 中包含的屬性就再也不介紹了:

能夠像 getPerformanceTiming 獲取網頁的時間同樣,獲取某個資源的時間:

 

 使用 performance.now() 精確計算程序執行時間

performance.now() 與 Date.now() 不一樣的是,返回了以微秒(百萬分之一秒)爲單位的時間,更加精準。

而且與 Date.now() 會受系統程序執行阻塞的影響不一樣,performance.now() 的時間是以恆定速率遞增的,不受系統時間的影響(系統時間可被人爲或軟件調整)。

注意 Date.now() 輸出的是 UNIX 時間,即距離 1970 的時間,而 performance.now() 輸出的是相對於 performance.timing.navigationStart(頁面初始化) 的時間。

使用 Date.now() 的差值並不是絕對精確,由於計算時間時受系統限制(可能阻塞)。但使用 performance.now() 的差值,並不影響咱們計算程序執行的精確時間。

 

 使用 performance.mark() 也能夠精確計算程序執行時間

使用 performance.mark() 標記各類時間戳(就像在地圖上打點),保存爲各類測量值(測量地圖上的點之間的距離),即可以批量地分析這些數據了。

直接上示例代碼看註釋便明白:

能夠看到,for 循環 measureRandomFunc888 的時候

結束時間爲: 4875.1199999969685

開始時間爲:4875.112999987323

執行時間爲:4875.1199999969685 – 4875.112999987323 = 0.00700000964

標記和測量用完了能夠清除掉:

固然 performance.mark() 只是提供了一些簡便的測量方式,好比以前咱們測量 domReady 是這麼測的:

其實就能夠寫成:

相關文章
相關標籤/搜索