• 看懂 Performance 面板的每個區域:Live Metrics 首頁、時間軸總覽、各軌道、火焰圖、底部分頁與 Insights 側欄。

  • 正確設定錄製環境(CPU / 網路節流、截圖),並知道為什麼要這樣設。

  • 依照三套固定流程,分別診斷 LCP、INP 與 CLS 問題,並定位到具體的資源、元素或程式碼。

  • 搭配 Network 面板讀懂瀑布圖的每個階段與優先權。

本章是操作手冊,建議一邊開著 Chrome(建議使用最新的穩定版或 Canary)一邊閱讀。DevTools 介面每幾個月會有調整,若某個按鈕名稱略有不同,請以功能描述為準。所有截圖式的說明都以文字與示意圖呈現,方便你對照自己的畫面。

開啟面板:Live Metrics 首頁

按 (macOS:)開啟 DevTools,切到 Performance 分頁。在尚未錄製任何東西時,你會看到 Live Metrics 畫面,它就是一個即時的 Web Vitals 儀表板:

  • 三張指標卡:目前這個分頁的本地 LCP、CLS、INP,並以綠 / 橘 / 紅標示良好 / 待改善 / 不佳。這些數值會隨你操作頁面而更新——非常適合重現「只有在某些操作下才出現」的 INP 或 CLS 問題。

  • LCP 元素:卡片下方顯示 LCP 元素的節點,滑鼠移上去會在頁面上高亮。展開卡片可看到 LCP 的四個子部分()。

  • Interactions 與 Layout shifts 面板:列出每一次互動(目標元素、類型、三個子部分的時間)與每一次版面跳動(分數、元素)。可清除重來。

  • Field data(CrUX):右側可開啟「Field metrics」,輸入網址後 DevTools 會抓取 CrUX 的 28 天 p75 數據並排顯示,還會提示「本地與真實數據差異很大」的情況,並依真實使用者的裝置與網路分布建議你應該用哪一級的 CPU 與網路節流。

  • Environment settings:直接在這裡設定 CPU throttling、Network throttling,以及是否模擬行動裝置。

  1. 用無痕視窗或乾淨的 profile:瀏覽器擴充功能會注入腳本、佔用主執行緒,嚴重干擾量測。

  2. 開啟 CPU 節流:桌機 CPU 比中階手機快 4–10 倍。Performance 面板提供 4x / 6x / 20x 與「Calibrated」(依你的機器校準出「低階行動裝置」與「中階行動裝置」的等效倍率)。行動版問題請至少用 4x。

  3. 開啟網路節流:常用 Slow 4G(或 Fast 4G)。注意這是在瀏覽器層模擬,無法完全反映真實無線網路的封包遺失與 RTT 抖動。

錄製一段 trace

面板左上角有兩個錄製按鈕:

  • Record(圓點):開始錄製目前頁面的執行期行為。用於 INP(錄製時要親手互動)、動畫、捲動卡頓。按 Stop 結束。

  • Record and reload(重新整理圖示):重新載入頁面並錄製整個載入過程,載入穩定後自動停止。用於 LCP、FCP、載入階段的 CLS 與長任務。

齒輪圖示展開「Capture settings」:

  • Screenshots:錄製逐幀截圖,形成 filmstrip,可用來目視確認 LCP 元素何時出現、版面何時跳動。建議開啟。

  • Memory:記錄 JS heap、節點數等,除錯記憶體問題時才開。

  • Disable JavaScript samples:關掉 JS 呼叫堆疊取樣,降低錄製開銷,但火焰圖只剩瀏覽器層級事件。一般不勾。

  • Enable advanced paint instrumentation (slow):記錄圖層與繪製細節,除錯 paint / composite 問題時才開。

  • Enable CSS selector stats (slow):統計哪些選擇器在樣式重算中最耗時。

錄好的 trace 可用右上角的「儲存」匯出為 ,在 code review 或回報 bug 時附上,對方用「載入」即可看到完全相同的畫面。

版面導覽

max width=

Performance 面板版面示意(實際外觀依 Chrome 版本略有差異)

火焰圖的顏色語義

C2.2cm L3cm L8.4cm 顏色 & 類別 & 典型事件
黃 & Scripting & Evaluate Script、Function call、Event、Timer fired、XHR / fetch 回呼、GC
紫 & Rendering & Recalculate style、Layout、Pre-paint、Hit test;標紅三角的 Layout 通常是強制同步版面(forced reflow)
綠 & Painting & Paint、Composite layers、Image decode、Rasterize
藍 & Loading & Parse HTML、Parse stylesheet、Send request、Receive data
灰 & Task / System & 任務外框;長任務會有紅色標記
淺灰 & Idle & 主執行緒閒置

操作技巧

  • 縮放與平移:在火焰圖上用 / 縮放、/ 平移;或在總覽列拖曳選取範圍。雙擊一個事件會縮放到它。

  • Breadcrumbs:每次縮放會在總覽上方留下路徑,可快速跳回上一層。

  • 隱藏 / 排序軌道:對軌道名稱按右鍵可隱藏或調整順序;也可對火焰圖中的函式按右鍵「Hide function」或「Hide children」讓圖更乾淨。

  • 點選事件 \(\rightarrow\) Summary:顯示時間、來源檔案(可點擊跳到 Sources 面板對應行)、以及對 Layout 事件的「Layout forced」警告。

  • Ctrl / Cmd + 點選 Network 請求:在 Network 軌道點一個請求,Summary 顯示其優先權、各階段時間、大小與 initiator。

  • Annotations:對任何事件按右鍵可加上文字標籤、在兩個事件之間畫連線、或標記一段時間範圍,並會隨 trace 一起匯出,適合在團隊內溝通。

Insights 側欄:把 Lighthouse 的建議搬進 trace

Insights 側欄整合了 Lighthouse 的稽核邏輯,但最大的價值在於與時間軸連動:把滑鼠移到一個 insight 上,面板會高亮相關事件、畫出關鍵路徑或子部分覆蓋層;點擊則會縮放到該區域。常用項目:

L3.4cm L10cm Insight & 它告訴你什麼、該怎麼做
LCP breakdown(LCP by phase) & 四個子部分各佔多少();開啟 Field data 時會並列 CrUX 的 p75 子部分。看最長的那段。
LCP request discovery & 三個檢查:LCP 圖片是否有 、是否可在 HTML 中被發現、是否沒有 lazy-load。任一項打叉就是明確的修法。
Render blocking requests & 列出阻塞首次繪製的 CSS / JS 與各自造成的延遲估計。
Network dependency tree & 從 HTML 出發的關鍵請求鏈(A 載入 B、B 再載入 C),鏈越長 LCP 越晚。目標是縮短、扁平化。
Document request latency & HTML 請求本身的問題:重導、TTFB 過高、未壓縮。
Font display & 有沒有字型阻塞文字顯示(FOIT),建議 。
Image delivery & 圖片格式、尺寸、壓縮的可節省位元組估計。
INP breakdown & 錄製期間最慢的互動及其三個子部分;需在錄製時有實際互動。
Layout shift culprits & 最大的 CLS 叢集、其中每次跳動的元素、與可能的原因(無尺寸圖片、注入的 iframe、字型變化、動畫)。滑過每次跳動會顯示前後截圖動畫。
Third parties & 各第三方來源在主執行緒與網路上的成本排名。
Forced reflow & 哪段程式碼在讀取版面屬性時觸發了同步版面計算,含呼叫堆疊。
DOM size & 節點數、最大深度、最多子節點的元素。
Legacy JavaScript / Duplicated JavaScript & 為舊瀏覽器多打包的 polyfill / transpile 成本;重複打包的模組。
Use efficient cache lifetimes & 快取壽命過短的靜態資源()。

實戰流程 A:診斷 LCP

  1. 在 Live Metrics 頁面設定 CPU 4x、Slow 4G,勾選 Screenshots,按 Record and reload。

  2. 錄製結束後,在 Timings 軌道找到 LCP 標記。點它:Summary 會顯示 LCP 元素(可 hover 在頁面上高亮)、時間與相關資源 URL。

  3. 開啟左側 Insights \(\rightarrow\) LCP breakdown:看四個子部分。

    • TTFB 大:切到 Network 軌道第一個請求,看等待時間;回到、的手法。

    • 資源載入延遲大:在 Network 軌道找到 LCP 圖片的請求條,看它何時開始。往左看在它之前主執行緒在做什麼(通常是一大塊黃色的 Evaluate Script——JS 才插入圖片)或 CSS 才剛解析完(背景圖)。同時看 LCP request discovery 的三個勾。

    • 資源載入時間大:點該請求,看 Summary 的大小、優先權(Priority 應為 High)、協定。用 filmstrip 對照圖片何時出現。

    • 元素渲染延遲大:看 LCP 資源 之後、LCP 標記之前,主執行緒是否被長任務(黃色)佔住,或 Render blocking requests 是否還有東西沒到。

  4. 檢查 Network dependency tree 與 Render blocking requests,把不該在關鍵路徑上的東西移走。

  5. 修改後用同樣設定再錄一次比較。變異是正常的,建議至少錄 3 次取中位數。

實戰流程 B:診斷 INP

  1. 設定 CPU 4x(或 Calibrated 的中階行動裝置)。按 Record(不是 reload)。

  2. 親手操作你懷疑會慢的互動:點按鈕、開選單、在輸入框打字、切換分頁。也試著在頁面還在載入時就互動——真實使用者不會等。按 Stop。

  3. 看 Interactions 軌道:每次互動一條橫條,超過 200 ms 的會標示警告。橫條分成三段(可 hover 看):輸入延遲 / 處理時間 / 呈現延遲,兩端的細線(whiskers)代表輸入延遲與呈現延遲。

  4. 點選最長的互動,同時對照它正下方的 Main 軌道:

    • 輸入延遲長:互動開始時主執行緒已經有一個灰色 Task 在跑(往往是載入期的 Evaluate Script、第三方 Timer fired、或前一次互動還沒處理完)。找出那個任務是誰的。

    • 處理時間長:黃色 Event: click / keydown 之下的 Function call 就是你的處理器。點它,Summary 有檔案與行號;切到 Bottom-Up、Group by Activity,看哪個函式自身時間最多。框架的 re-render 會顯示為一大串框架內部函式,此時 Group by URL 可快速看出是框架還是你的程式碼。

    • 呈現延遲長:處理器結束後出現大塊紫色(Recalculate style / Layout)與綠色(Paint),代表 DOM 變動太大或觸發了昂貴的版面計算。若 Layout 帶紅三角,Summary 會指出是哪一行讀了版面屬性(forced reflow)。

  5. 開啟 Insights \(\rightarrow\) INP breakdown 確認三段比例;在 Live Metrics 的 Interactions 列表也可看到同樣資訊。

  6. 修法回到:拆長任務、視覺回饋先行、把渲染變便宜。

實戰流程 C:診斷 CLS

  1. Record and reload(載入期跳動)或 Record 後捲動、互動(延遲載入內容的跳動),建議開 Screenshots。

  2. 看 Layout shifts 軌道:每次跳動是一個小區塊,被歸在同一 session window 的會以叢集標示。點叢集或單次跳動,Summary 列出分數、移動的元素(hover 高亮)、前後位置。

  3. 開啟 Insights \(\rightarrow\) Layout shift culprits:直接列出最大叢集中的每次跳動與可能原因;滑過會播放前後截圖的動畫,一眼看出「誰把誰推開」。

  4. 對照 filmstrip 與 Network 軌道:跳動發生的瞬間是哪個資源剛載完(圖片?字型?廣告 iframe?)。

  5. 修法回到的成因對策表。修完後用 Live Metrics 的 Layout shifts 面板快速驗證,不必每次錄 trace。

搭配 Network 面板

Performance 面板的 Network 軌道適合看「與主執行緒的時間關係」,但細節在 Network 面板更完整:

  • 瀑布圖(Waterfall)各段:Queueing(等待可用連線 / 優先權排隊)、Stalled、DNS Lookup、Initial connection、SSL、Request sent、Waiting for server response(TTFB)、Content Download。點請求 \(\rightarrow\) Timing 分頁可看精確數字。若有 Service Worker,還會多出 Request to ServiceWorker、ServiceWorker preparation、respondWith 等段。

  • Priority 欄(右鍵表頭開啟):Highest / High / Medium / Low / Lowest。LCP 圖片應為 High;若是 Low 就是 的用武之地。

  • Protocol 欄:h3 / h2 / http/1.1。

  • Size 欄:顯示 、、、,或實際傳輸大小;下方灰字是解壓後大小。304 會顯示很小的傳輸量。

  • Initiator 欄:誰發起這個請求;hover 顯示呼叫堆疊。用來追「為什麼 LCP 圖片這麼晚才被請求」。

  • Disable cache:模擬首次造訪。Preserve log:跨導覽保留記錄。Block request URL:測試某第三方移除後的影響。

  • 篩選列可用 、、、 等語法。

其他相關工具

  • Lighthouse 面板:一鍵產生實驗室報告,適合快速盤點;其 insights 與 Performance 面板一致,Lighthouse 12 起可直接「View trace」跳到 Performance 面板。

  • Rendering 側欄(More tools \(\rightarrow\) Rendering):Paint flashing(哪些區域在重繪)、Layout Shift Regions(跳動區域藍色閃爍)、Frame Rendering Stats(FPS 與 GPU)、Scrolling performance issues。

  • Performance monitor(More tools):即時折線圖:CPU、JS heap、DOM 節點數、每秒 layout / style recalc 次數。找記憶體洩漏與版面抖動很好用。

  • Coverage(More tools):顯示每個 JS / CSS 檔有多少位元組在載入期間未被執行 / 使用,是 code splitting 的依據。

  • Application \(\rightarrow\) Back/forward cache:測試頁面是否能進入 bfcache 並列出原因()。

  • Web Vitals 擴充功能:在頁面角落常駐顯示三項指標,並可在 Console 印出 attribution;與 Live Metrics 功能重疊,但方便一般瀏覽時觀察。

課堂實作

挑一個內容豐富的公開網站(新聞、電商)。設定 CPU 4x、Slow 4G、Screenshots,Record and reload。完成後回答:(1) LCP 是多少、元素是什麼、四個子部分各多久?(2) 有幾個 render-blocking 請求?(3) 最長的任務多長、是誰的程式碼?(4) 有沒有版面跳動?哪個元素?把 trace 存檔。

用實作 3-2 的「建立 20,000 個 li」頁面(或任何有慢互動的頁面),CPU 4x,Record,點擊,Stop。在 Interactions 軌道找到該互動,記錄三個子部分;在 Main 軌道找到對應的 Function call,用 Bottom-Up 找出自身時間最多的函式;點擊來源連結跳到 Sources 面板。然後把程式碼改成分批 + yield 版本,再錄一次,比較 Interactions 軌道的變化。

在 Live Metrics 開啟 Field metrics,輸入一個流量足夠的網站。比較本地與 CrUX 的 LCP 差距,並依 DevTools 的建議調整 CPU / 網路節流後再錄一次,看本地數字是否更接近真實 p75。討論:為什麼還是會有差距?(裝置分布、地理位置、快取狀態、登入狀態……)

  1. 火焰圖中一個 Layout 事件帶有紅三角,Summary 顯示「Forced reflow is a likely performance bottleneck」。這代表什麼?請寫出一段會造成這種情況的程式碼,並修正它。

  2. Interactions 軌道顯示某次點擊的輸入延遲 180 ms、處理 30 ms、呈現 20 ms。你會先去看 Main 軌道的哪個位置?可能的成因是什麼?

  3. 為什麼「Record and reload」適合看 LCP,而 INP 必須用「Record」並親手互動?

  4. 為什麼 DevTools 建議依 CrUX 數據調整 CPU 節流倍率,而不是統一用 4x?

  5. Network 面板中某圖片的 Priority 是 Low、Initiator 是某個 JS 檔。這兩個資訊分別對應 LCP 的哪個子部分問題?該怎麼修?

  • Performance 面板的入口是 Live Metrics:即時 LCP / INP / CLS、LCP 元素、互動與跳動列表、CrUX 對照與環境建議。

  • 錄製前先設定 CPU 與網路節流、開啟 Screenshots,並用乾淨的瀏覽器環境。

  • 讀圖三要素:Timings 找指標時間點、Main 火焰圖看主執行緒在做什麼(黃 scripting、紫 rendering、綠 painting、藍 loading、紅三角長任務)、Network 看資源何時開始與結束。

  • Insights 側欄把 LCP 子部分、INP 子部分、CLS 兇手與各種稽核直接疊在時間軸上,是最快的定位工具。

  • 三套流程:LCP 看 Timings + LCP breakdown + Network;INP 看 Interactions + 正下方的 Main + Bottom-Up;CLS 看 Layout shifts + culprits + filmstrip。