經過HTML5 Performanc相關的API,咱們能夠對頁面進行性能分析。javascript
下面會就幾個比較重要的過程進行分析,給出耗時計算方法,並針對性的給出一些優化建議。css
// 下文中的timing均表示performance.timing let timing = window.performance.timing;
域名系統(英文:Domain Name System,縮寫:DNS)是互聯網的一項服務。它做爲將域名和IP地址相互映射的一個分佈式數據庫,可以令人更方便地訪問互聯網。html
簡單來講就是將一個域名映射到其對應的服務器IP地址,後續的請求均發送到該服務器。java
DNS查詢的基本過程以下:web
舉個栗子m.taobao.com:算法
耗時計算:數據庫
let dns = timing.domainLookupEnd - timing.domainLookupStart;
明白工做原理後咱們就能夠針對域名解析這塊作出一些優化,下面是一些優化建議:瀏覽器
耗時計算:緩存
let tcp = timing.connectEnd - timing.connectStart;
優化點以下:服務器
從發送請求到開始響應的過程。
耗時計算:
let req = timing.responseStart - timing.requestStart;
優化點以下:
從響應開始到數據傳輸完成的過程。
耗時計算:
let res = timing.responseEnd - timing.responseStart;
優化點以下:
耗時計算:
let dom = timing.domInteractive - timing.domLoading;
優化點以下:
下載並執行擁有defer屬性的腳本。
耗時計算:
let dom = timing.domInteractive - timing.domLoading;
這一塊的優化點主要集中在js代碼層次的優化。然鵝,js的優化值得寫本書來好好唸叨唸叨,so,這裏就不展開了,主要給幾個點吧:
DOM和CSSOM解析完成,並組合成爲渲染樹以後開始加載並執行defer
的腳本。
defer
的腳本執行完成就觸發了DOMContentLoad
事件,同時進行的還有圖片,css等,這些資源文件加載完成後纔是domComplete
。
domComplete
以後就馬上觸發load事件。
耗時計算
let domComplete = timing.domComplete - timing.domContentLoadedEventEnd;
這一塊的優化主要集中在資源層次的優化,這也是一個比較大的項目,同樣,挑幾個點說一下:
此外,DOMContentLoaded事件耗時
和DOMLoad事件耗時
,主要就是執行js代碼,優化建議參考網頁加載完成
。
以上~