成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Web 前端性能分析(二)

idisfkj / 3196人閱讀

摘要:簡(jiǎn)要說(shuō)明在上一篇文章前端性能分析一中,我們對(duì)前端性能相關(guān)的知識(shí)進(jìn)行了學(xué)習(xí)和探討,并且做了一個(gè)試驗(yàn)性質(zhì)的項(xiàng)目用來(lái)實(shí)踐和驗(yàn)證,本文附上主要功能模塊的源碼,作為對(duì)前端性能分析的學(xué)習(xí)記錄。能夠?qū)崿F(xiàn)對(duì)網(wǎng)頁(yè)性能的監(jiān)控,主要是依靠。

簡(jiǎn)要說(shuō)明

在上一篇文章《Web 前端性能分析(一)》中,我們對(duì)前端性能相關(guān)的知識(shí)進(jìn)行了學(xué)習(xí)和探討,并且做了一個(gè)試驗(yàn)性質(zhì)的項(xiàng)目用來(lái)實(shí)踐和驗(yàn)證,本文附上主要功能模塊 - web-performance.js 的源碼,作為對(duì)web前端性能分析的學(xué)習(xí)記錄。

Performance API

能夠?qū)崿F(xiàn)對(duì)網(wǎng)頁(yè)性能的監(jiān)控,主要是依靠 Performance API。

《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》

MDN文檔

模塊源碼 web-performance.js
/**
 * ------------------------------------------------------------------
 * 網(wǎng)頁(yè)性能監(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; // 記錄頁(yè)面初始化性能信息
    wp.xhrInfoArr = []; // 記錄頁(yè)面初始化完成前的 ajax 信息


    /**
     * performance 基本方法 & 定義主要信息字段
     * ------------------------------------------------------------------
     */

    // 計(jì)算首頁(yè)加載相關(guān)時(shí)間
    wp.getPerformanceTiming = function () {
      var t = performance.timing;
      var times = {};

      //【重要】頁(yè)面加載完成的時(shí)間, 這幾乎代表了用戶等待頁(yè)面可用的時(shí)間
      times.pageLoad = t.loadEventEnd - t.navigationStart;
      //【重要】DNS 查詢時(shí)間
      // times.dns = t.domainLookupEnd - t.domainLookupStart;
      //【重要】讀取頁(yè)面第一個(gè)字節(jié)的時(shí)間(白屏?xí)r間), 這可以理解為用戶拿到你的資源占用的時(shí)間
      // TTFB 即 Time To First Byte 的意思
      times.ttfb = t.responseStart - t.navigationStart;
      //【重要】request請(qǐng)求耗時(shí), 即內(nèi)容加載完成的時(shí)間
      // times.request = t.responseEnd - t.requestStart;
      //【重要】解析 DOM 樹結(jié)構(gòu)的時(shí)間
      // times.domParse = t.domComplete - t.responseEnd;
      //【重要】用戶可操作時(shí)間
      times.domReady = t.domContentLoadedEventEnd - t.navigationStart;
      //【重要】執(zhí)行 onload 回調(diào)函數(shù)的時(shí)間
      times.onload = t.loadEventEnd - t.loadEventStart;
      // 卸載頁(yè)面的時(shí)間
      // times.unloadEvent = t.unloadEventEnd - t.unloadEventStart;
      // TCP 建立連接完成握手的時(shí)間
      times.tcpConnect = t.connectEnd - t.connectStart;

      // 開始時(shí)間
      times.startTime = t.navigationStart;

      return times;
    };

    // 計(jì)算單個(gè)資源加載時(shí)間
    wp.getEntryTiming = function (entry) {

      // entry 的時(shí)間點(diǎn)都是相對(duì)于 navigationStart 的相對(duì)時(shí)間

      var t = entry;
      var times = {};

      // 重定向的時(shí)間
      // times.redirect = t.redirectEnd - t.redirectStart;
      // DNS 查詢時(shí)間
      // times.lookupDomain = t.domainLookupEnd - t.domainLookupStart;
      // TCP 建立連接完成握手的時(shí)間
      // times.connect = t.connectEnd - t.connectStart;

      // 用戶下載時(shí)間
      times.contentDownload = t.responseEnd - t.responseStart;
      // ttfb 讀取首字節(jié)的時(shí)間 等待服務(wù)器處理
      times.ttfb = t.responseStart - t.requestStart;

      // 掛載 entry 返回
      times.resourceName = entry.name; // 資源名稱, 也是資源的絕對(duì)路徑
      times.entryType = entry.entryType; // 資源類型
      times.initiatorType = entry.initiatorType; // link  | script                 
閱讀需要支付1元查看
<