摘要:簡要說明在上一篇文章前端性能分析一中,我們對前端性能相關(guān)的知識進(jìn)行了學(xué)習(xí)和探討,并且做了一個試驗(yàn)性質(zhì)的項(xiàng)目用來實(shí)踐和驗(yàn)證,本文附上主要功能模塊的源碼,作為對前端性能分析的學(xué)習(xí)記錄。能夠?qū)崿F(xiàn)對網(wǎng)頁性能的監(jiān)控,主要是依靠。
簡要說明
在上一篇文章《Web 前端性能分析(一)》中,我們對前端性能相關(guān)的知識進(jìn)行了學(xué)習(xí)和探討,并且做了一個試驗(yàn)性質(zhì)的項(xiàng)目用來實(shí)踐和驗(yàn)證,本文附上主要功能模塊 - web-performance.js 的源碼,作為對web前端性能分析的學(xué)習(xí)記錄。
Performance API能夠?qū)崿F(xiàn)對網(wǎng)頁性能的監(jiān)控,主要是依靠 Performance API。
《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》
MDN文檔
模塊源碼 web-performance.js/** * ------------------------------------------------------------------ * 網(wǎng)頁性能監(jiān)控 * ------------------------------------------------------------------ */ (function (win) { // 兼容的數(shù)組判斷方法 if (!Array.isArray) { Array.isArray = function (arg) { return Object.prototype.toString.call(arg) === "[object Array]"; }; } // 模塊定義 function factory() { var performance = win.performance; if (!performance) { // 當(dāng)前瀏覽器不支持 console.log("Browser does not support Web Performance"); return; } var wp = {}; wp.pagePerformanceInfo = null; // 記錄頁面初始化性能信息 wp.xhrInfoArr = []; // 記錄頁面初始化完成前的 ajax 信息 /** * performance 基本方法 & 定義主要信息字段 * ------------------------------------------------------------------ */ // 計(jì)算首頁加載相關(guān)時間 wp.getPerformanceTiming = function () { var t = performance.timing; var times = {}; //【重要】頁面加載完成的時間, 這幾乎代表了用戶等待頁面可用的時間 times.pageLoad = t.loadEventEnd - t.navigationStart; //【重要】DNS 查詢時間 // times.dns = t.domainLookupEnd - t.domainLookupStart; //【重要】讀取頁面第一個字節(jié)的時間(白屏?xí)r間), 這可以理解為用戶拿到你的資源占用的時間 // TTFB 即 Time To First Byte 的意思 times.ttfb = t.responseStart - t.navigationStart; //【重要】request請求耗時, 即內(nèi)容加載完成的時間 // times.request = t.responseEnd - t.requestStart; //【重要】解析 DOM 樹結(jié)構(gòu)的時間 // times.domParse = t.domComplete - t.responseEnd; //【重要】用戶可操作時間 times.domReady = t.domContentLoadedEventEnd - t.navigationStart; //【重要】執(zhí)行 onload 回調(diào)函數(shù)的時間 times.onload = t.loadEventEnd - t.loadEventStart; // 卸載頁面的時間 // times.unloadEvent = t.unloadEventEnd - t.unloadEventStart; // TCP 建立連接完成握手的時間 times.tcpConnect = t.connectEnd - t.connectStart; // 開始時間 times.startTime = t.navigationStart; return times; }; // 計(jì)算單個資源加載時間 wp.getEntryTiming = function (entry) { // entry 的時間點(diǎn)都是相對于 navigationStart 的相對時間 var t = entry; var times = {}; // 重定向的時間 // times.redirect = t.redirectEnd - t.redirectStart; // DNS 查詢時間 // times.lookupDomain = t.domainLookupEnd - t.domainLookupStart; // TCP 建立連接完成握手的時間 // times.connect = t.connectEnd - t.connectStart; // 用戶下載時間 times.contentDownload = t.responseEnd - t.responseStart; // ttfb 讀取首字節(jié)的時間 等待服務(wù)器處理 times.ttfb = t.responseStart - t.requestStart; // 掛載 entry 返回 times.resourceName = entry.name; // 資源名稱, 也是資源的絕對路徑 times.entryType = entry.entryType; // 資源類型 times.initiatorType = entry.initiatorType; // link | script