Bob Cheng
Web

Web Performance Metrics

Core Web Vitals 是 Google 提供的一組指標,包含 LCP, INP, CLS。

First Paint (FP)

螢幕上出現第一個「與背景顏色不同的 pixels」 的時間點

First Contentful Paint (FCP)

螢幕上出現第一個 content 的時間點

  • content 可以是 text, images, <svg>, non-white <canvas>

Largest Contentful Paint (LCP)

當 viewport 中「最大的 element」出現在螢幕上的時間點

  • element 可以是 <img><p>,具體考慮範圍可以見: MDN Web Docs
  • 有一個類似的叫 First Meaningful Paint (FMP),但是因為不容易定義所以已經被棄用了

    FCP 和 LCP 的範例 | https://web.dev/articles/lcp

Interaction to Next Paint (INP)

所有用戶與頁面的互動中,「延遲時間最長的互動」的延遲時間

  • 「互動」只考慮 mouse click, keyboard press, touchscreen touch
  • 為了去除網頁當機造成的延遲,每當互動次數超過 50 次時就會將目前最長的延遲時間去掉

    延遲時間的計算方式 | https://web.dev/articles/inp

Time to Interactive (TTI)

從 FCP 開始,到 5s quiet window 之前的「最後一個 long task 的結束時間」的時長

  • long task 是指執行超過 50ms 的 task
  • quiet window 是一段期間內: 沒有 long tasks,還在等待的 GET request 不超過兩個

    TTI 的測量方式 | https://web.dev/articles/tti

Total Blocking Time (TBT)

在一段時間內 (通常是 FCP 到 TTI) 的「所有 long task 的 blocking time 的總和」

  • 由於瀏覽器不能 interrupt 正在執行的 task,當 main thread 正在執行 long task 時可能會 block 住用戶的互動,因此當 task 的執行時間遠超過 50ms 時,用戶就有可能會注意到「卡頓」的情形
  • 一個 long task 的 blocking time 指的是其在 50ms 後的剩餘執行時間

Cumulative Layout Shift (CLS)

在網頁生命週期內的所有 session windows 中「CLS 最高的 window 的分數」

  • layout shifts 指的是在兩個連續的 frame 間,頁面中的某些元素改變了 start position
    • 發生變化的元素稱為 unstable elements
    • 如果是加入新元素,只要沒有影響到原本元素的 start position 就不會被算入
  • layout shifts score 的計算方式是 impact fraction * distance fraction
    • impact fraction 指的是所有 unstable elements 佔的「區域總和」 (包括當前 frame 和前一個 frame) 佔 viewport 的比例
    • distance fraction 指的是所有 unstable elements 中「最大的水平或垂直位移距離」佔 viewport 寬高的比例
    • 範例
  • session window 代表著一連串的 layout shift
    • 從第一個 layout shift 開始計算 window,當有新的 layout shift 發生就會把 window 延長
    • 當 1s 內都沒有任何 layout shift 發生、或是 window 超過 5s,就會終止當前 window,下一個 layout shift 發生時再開始計算下一個 window
  • 一個 session window 的 CLS 是其內所有 layout shift 的分數加總

Time To First Byte (TTFB)

詳見 How browser render a page


References