通常咱們能夠經過瀏覽器的調試工具-網絡面板,或者代理工具查看網頁加載過程當中的各個階段的耗時。而利用window.performance屬性則能夠得到更爲精確的原始數據,以毫秒爲單位,精確到微秒。javascript
performance.timing屬性介紹html
圖片說明以下:java
屬性說明:瀏覽器
1.DNS尋址時間:t.domainLookupEnd - t.domainLookupStart。緩存
優化方法:檢查頁面是否添加了DNS預解析代碼。服務器
<link rel="dns-prefetch" href="//haitao.nosdn1.127.net">
是否合理利用域名發散與域名收斂的策略。網絡
2.TCP鏈接耗時:t.connectEnd - t.connectStart。dom
3 首包時間: t.responseStart - t.navigationStart。函數
優化方法:是否加cdn,數據能否靜態化等。工具
4.request請求耗時:t.responseEnd - t.requestStart。
優化方法:返回內容是否已經壓縮過,靜態資源是否打包好等。
5.白屏時間。
白屏時間是最影響用戶體驗的,時間越久,用戶等待就越久。
6.解析DOM樹結構的時間:t.domComplete - t.domLoading。
優化方法:檢查dom節點是否過多,dom是否嵌套過深。
7.頁面加載完成的時間:t.loadEventEnd - t.fetchStart。
優化方法:考慮延遲加載,懶加載,部分加載,減小首屏渲染時間。
performance.getEntries():每一個資源請求的時間數據。
performance.now() 計算網頁從performance.timing.navigationStart到當前時間的毫秒數。
精確計算某個操做,或某個方法執行的耗時。
var start = performance.now(); dosomething(); var end = performance.now(); var time = end - start; console.log('耗時' + time + '毫秒。');
或者console.time('aa'),console.timeEnd('aa')計算。
performance.mark()給相應的視點作標記。結合performance.measure()使用也能夠算出各個時間段的耗時。
執行下列代碼能夠查看頁面加載各個階段的耗時。
function getTimes(){ var t = performance.timing; var timing = { domainLookupTime: t.domainLookupEnd - t.domainLookupStart, TCPConnectTime: t.connectEnd - t.connectStart, ttfb: t.responseStart - t.navigationStart, requestTime: t.responseEnd - t.requestStart, waitTime: t.domLoading - t.navigationStart, renderDomTime: t.domComplete - t.domLoading, loadPageTime: t.loadEventEnd - t.fetchStart } console.log(timing); } getTimes();
http://javascript.ruanyifeng.com/bom/performance.html
https://developer.mozilla.org/zh-CN/docs/Web/API/Performance
https://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute