計算渲染關鍵過程所花費的時間


你不可以優化你不能測量的事情。但是Navegation Timing API可以讓我們測量關鍵的渲染過程時間!

  • Navigation Timing 為計算CRP提供了高精度的時間戳 
  • 瀏覽器發送了一系列可測量的時間來捕捉CRP的各種狀態

Navigation Timing API 提供了良好的測量:

Navigation Timing

上表中的每個標簽對應了一個高精度的時間戳,瀏覽器在每個網頁加載的時候進行監測。我們去除一切和網絡相關的時間戳,只展示一小部分:

    • domLoading: 這是整個過程中開始時的時間戳,瀏覽器第一次收到HTML文檔的字節開始解析時的時間戳。
    • domInteractive: 當瀏覽器完成了所有的HTML解析且DOM構造完成時的時間戳。

domContentLoaded

    : 當DOM完畢且沒有css樣式阻止js的執行——意味着我們現在可以構造render tree——的時間戳。
    • 許多js框架當它們開始執行它們自己的邏輯之前等待這個事件——因為瀏覽器捕捉EventStart和EventEnd時間戳來允許我們追蹤這個事件執行多久。
  • domComplete: 和名字暗示的一樣,頁面上所有的資源(例如圖片等)下載完成和頁面上所有的操作都完
  • loadEvent: 當每個頁面上最后一步加載瀏覽器的時候出發onload事件的時候會觸發額外的應用邏輯
    • domInteractive 標記DOM完成

domContentLoaded

     標記DOM和CSSOM的完成
    • 如果這里沒有js阻塞的話domInteractive之后會馬上是DOMContentLoaded
  • domComplete 標記當頁面以及所有的資源都完成時候

 

<html>
  <head>
    <title>Critical Path: Measure</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link href="style.css" rel="stylesheet">
    <script>
      function measureCRP() {
        var t = window.performance.timing,
          interactive = t.domInteractive - t.domLoading,
          dcl = t.domContentLoadedEventStart - t.domLoading,
          complete = t.domComplete - t.domLoading;
        var stats = document.createElement('p');
        stats.textContent = 'interactive: ' + interactive + 'ms, ' +
            'dcl: ' + dcl + 'ms, complete: ' + complete + 'ms';
        document.body.appendChild(stats);
      }
    </script>
  </head>
  <body onload="measureCRP()">
    <p>Hello <span>web performance</span> students!</p>
    <div><img src="awesome-photo.jpg"></div>
  </body>
</html>

上面的代碼是:Navigation Timing API捕捉了所有的相關時間戳且我們的代碼等待onload事件的觸發——記得onload事件在domInteractive,domContentLoaded和domComplete之后觸發——且計算每個時間戳的不同。

NavTiming demo

就像我們所說和所做的兒一樣,我么可使用一個函數簡單的追蹤測量所有這些過程。

你同樣可以在你的代碼中嵌入分析服務商(Google Analytics does this automatically)的代碼。

 

原文鏈接:https://developers.google.com/web/fundamentals/performance/critical-rendering-path/measure-crp?hl=en


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM