Container Timing 來源試用

發布日期:2026 年 5 月 1 日

Chrome 將從 Chrome 148 開始,針對 Container Timing 效能 API 推出來源試用

最大內容繪製 (LCP) 等指標會評估最大內容的繪製時間,提供網頁「載入」時間的概略資訊。不過,網站可能也會對網頁特定部分的載入時間感興趣,而不只是「最大」部分。

網站可使用元素時間,透過 elementtiming 屬性標記元素,瞭解元素載入時間,無論是否為 LCP 元素。不過,與 LCP 相同,TBT 只能測量個別元素的算繪時間。

容器時間會擴充元素時間的概念,用來評估「內容區塊」(或「容器」)。這可讓您瞭解何時向使用者提供完整元件,例如小工具、資訊卡、內容區段、側欄等。這個工具可為網站提供額外的成效資訊,方便您深入瞭解網站成效。

Container Timing 由 Bloomberg 開發,並由 Igalia 在 Chrome 中實作,Chrome 使用者和其他 Chromium 架構瀏覽器可透過旗標使用這項功能,網站也可透過來源試用在實際環境中測試。

來源試用是 API 推出前的最後步驟之一,開發人員可以在預設啟動功能前,在網站上啟用該功能進行測試,並通知團隊功能是否正常運作且實用。開發人員也能在發布前,建議對 API 設計進行任何變更。

Container Timing API 的運作方式

與元素時間類似,容器時間也是透過在各種 HTML 元素中加入屬性 (containertiming),向瀏覽器指出應測量的元素:

<div containertiming="my-component">
  <h2>Title</h2>
  <div>...</div>
</div>

接著,您可以使用 PerformanceObserver 觀察該容器中的繪製作業,方式與其他成效指標相同:

<script>
  const observer = new PerformanceObserver((entryList) => {
    for (const entry of entryList.getEntries()) {
      console.log("Container painted:", entry.identifier);
      console.log("First render:", entry.firstRenderTime);
      console.log("Latest paint:", entry.startTime);
      console.log("Painted area:", entry.size);
      console.log("Last painted element:", entry.lastPaintedElement);
    }
  });
  observer.observe({ type: "container", buffered: true });
</script>

當容器中繪製新元素時,系統會發出新的效能項目,並更新資訊。由於網頁的生命週期中可能會新增元素,因此沒有單一完成點。這與 LCP 類似,通常是在離開網頁時測量。

這些成效指標隨後會傳回至 Analytics,以供監控和分析。

您也可以使用 containertiming-ignore 屬性忽略子容器:

<div containertiming="main-content">

  <main>...</main>
  
  <!-- This aside and its children will be ignored -->
  <aside containertiming-ignore>...</aside>

</div>

示範

以下 CodePen 顯示 Container Timing API 的運作情形:

容器時間軸的示範 (來源)

如果瀏覽器不支援 Container Timing API,您也可以觀看下列影片,瞭解實際運作情形:

容器時間碼示範影片 (來源)

哪些更新會計入容器時間?

容器時間的目的是擷取容器載入所有子項元素的時間。這項指標並非要測量每個後續繪製作業,因為許多作業可能會在使用者與容器或網頁互動時才發生。因此,與 LCP 和元素時間類似,容器時間取決於「有內容的繪製」,且不會為已計為有內容的繪製的元素發出新的繪製項目。

舉例來說,如果容器一開始只轉譯背景顏色,或只包含非內容元素 (例如骨架畫面),系統就不會發出任何 container 項目,直到容器新增某些內容為止。

以更新為例,更新容器中現有元素的文字不會產生該更新的新 container 項目,因為系統只會將元素的畫面首次顯示所需時間視為內容。不過,如果將文字新增至空白元素,或為該文字新增其他元素,系統就會發出新的 container 項目,因為這是該元素首次繪製。

偵測容器時間支援的功能

containertiming 屬性不會導致不支援的瀏覽器發生問題,因此不需要偵測功能。

PerformanceObserver 會忽略任何新項目,但可能會在開發人員工具中造成警告,因此最佳做法是在新增觀察器之前,先進行功能偵測,例如使用下列程式碼:

if (typeof PerformanceContainerTiming !== "undefined") {
  // Container Timing is supported
}

最佳做法

如要充分運用容器時間,請遵循下列最佳做法:

  • 提早設定屬性:在 HTML 文件中加入 containertiming 屬性,或在將元素加入文件前加入,以完成追蹤。如果之後再透過 JavaScript 新增屬性,可能會導致繪製作業遺漏。
  • 使用有意義的 ID:containertiming 屬性選擇描述性名稱,方便進行分析。
  • 策略性放置:containertiming 套用至對指標有意義的語意區段,例如 hero-sectionproduct-gridcheckout-form。並非所有容器都需要測量。
  • 忽略不相關的內容:在不應影響元件指標的子項元素 (例如廣告或裝飾元素) 上使用 containertiming-ignore

如何啟用容器時間?

從 Chrome 147 開始,您可以使用 chrome://flags/#enable-experimental-web-platform-features 標記啟用 Container Timing API,也可以使用 --enable-blink-features=ContainerTiming 標記透過指令列啟用。

從 Chrome 148 開始,網站可以註冊來源試用權杖,並將權杖新增至網頁,自動啟用這項功能。您可以在實際使用者身上測試 API。容器時間指標可記錄在 Analytics 中,並進行分析,以驗證 API 是否正常運作及收集洞察資料。

意見回饋和詳細資料

如要提供 Container Timing API 的意見回饋,請在 GitHub 上回報問題

此外,一項規格也正在進行標準化程序。如要瞭解這個 API 的內部運作方式,Igalia 已發布文章,說明 API 的技術導入方式

結論

我們很高興看到這項 API 即將發布,也很期待開發人員能運用這項 API,深入瞭解效能問題。我們期待收集 API 的意見回饋,如果一切順利,很快就會推出這項 API。