window.performance 接口可以獲取到當前頁面中與性能相關的信息
1、performance.navigation:提供了在指定的時間段里發生的操作相關信息,包括頁面是加載還是刷新、發生了多少次重定向等等

引用:https://www.jianshu.com/p/1355232d525a
redirectCount:如果有重定向的話,頁面通過幾次重定向跳轉而來,默認為0;
type:該值的含義表示的頁面打開的方式
- 0(TYPE_NAVIGATE):表示正常進入該頁面(非刷新、非重定向)。
- 1(TYPE_RELOAD):表示通過 window.location.reload 刷新的頁面。如果我現在刷新下頁面后,再來看該值就變成1了。
- 2(TYPE_BACK_FORWARD ):表示通過瀏覽器的前進、后退按鈕進入的頁面。如果我此時先前進下頁面,再后退返回到該頁面后,查看打印的值,發現變成2了。
- 255(TYPE_RESERVED):表示非以上的方式進入頁面的
2、performance.timing:對象包含延遲相關的性能信息

頁面加載各個時間點:
卸載上一頁面;startTime;redirectStart重定向開始(若需要,則還有上一頁面的unloadEvent);fetchStart准備請求開始;App cache緩存檢查;如果沒有緩存,則DNS查詢,domainLookup域名解析時間;TCP連接connect與secureConnect;request開始請求;response響應;dom解析domInteractive;dom加載domContentLoad;loadEvent時間加載

性能優化時間計算:
- DNS查詢耗時 = domainLookupEnd - domainLookupStart
- TCP鏈接耗時 = connectEnd - connectStart
- request請求耗時 = responseEnd - responseStart
- 解析dom樹耗時 = domComplete - domInteractive
- 白屏時間 = domloadng - fetchStart
- 請求請求耗時 = responseEnd - responseStart
- domready時間 = domContentLoadedEventEnd - fetchStart
- onload時間 = loadEventEnd - fetchStart
3、Resource timing API:可以獲取和分析應用資源加載的詳細網絡計時數據,應用程序可以使用時間度量標准來確定加載特定資源所需要的時間
performance.getEntries

4、性能優化
4.1、網頁css資源盡量內聯,不要外聯,動態加載需要多次請求
4.2、重定向優化:重定向會耗時,304緩存
4.3、DNS優化:減少DNS請求數、DNS預獲取
4.4、TCP優化:減少HTTP請求數、http1.1響應頭Connection: keep-alive網頁打開后不馬上關閉連接,長鏈接(http1.0為短鏈接,一次網頁經歷三次握手四次揮手)
4.5:渲染優化:直構HTMl頁面,少用js渲染
