core-web-vitals:用現場與實驗室證據優化 LCP、INP、CLS

前言

Core Web Vitals(CWV)是 Google 用來衡量頁面體驗的三項指標:LCP(最大內容繪製)、INP(交互到下一次繪製)和 CLS(累積佈局偏移)。搜索排名與頁面體驗信號會參考這些指標,且按 第 75 百分位(p75) 評估——即約 75% 的訪問需達到「良好」閾值。

日常排障裏,Lighthouse 或 PageSpeed Insights 往往能指出「哪項指標不合格」,卻很少直接對應到「哪一個 DOM 元素、哪段資源或哪行代碼」。通用性能建議也容易泛泛而談。下面介紹 core-web-vitals Skill:它把三項 CWV 拆成可執行的診斷與修復路徑,並強調先量後改、用現場數據定優先級、用瀏覽器 trace 找根因。

這是什麼

core-web-vitals 是 web-quality-skills 倉庫中的 Agent Skill(metadata 標註作者爲 web-quality-skills,版本 2.0,MIT 許可)。一句話定位:結合 現場(field) 與 實驗室(lab) 證據,針對 LCP、INP、CLS 做定向優化。

官方 description 寫明適用場景包括:被要求「improve Core Web Vitals」「fix LCP」「reduce CLS」「optimize INP」「page experience optimization」或「fix layout shifts」時使用。在 officialskills.sh 上的說明還提到:覆蓋圖片預加載、主線程優化、佈局偏移防護,以及用 web-vitals 庫做現場測量;並包含面向 Next.js、React、Vue 的模式(以 Skill 文檔爲準)。

維護與歸屬:Skill 文件位於 Addy Osmani 的 web-quality-skills 倉庫路徑 skills/core-web-vitals;安裝入口見下文。

三項指標與閾值

Skill 文檔用表格固定了「良好 / 需改進 / 差」的邊界(與 Google 公開口徑一致):

指標 衡量內容 良好 需改進 差
LCP 加載 ≤ 2.5s 2.5s – 4s > 4s
INP 交互響應 ≤ 200ms 200ms – 500ms > 500ms
CLS 視覺穩定 ≤ 0.1 0.1 – 0.25 > 0.25

優化前應先確認當前是 哪一項 在 p75 上未達標,再只深入該項相關的洞察與代碼,避免「全站泛泛加緩存」卻碰不到真正的 LCP 元素或 CLS 觸發源。

核心功能

先測量,再優化

有可訪問 URL 時,Skill 要求優先閱讀同倉庫下的性能測量流程(../performance/references/MEASUREMENT.md),並建議順序爲:

  1. 查看頁面級 CrUX p75;若無頁面級數據,使用明確標註的 origin 回退。
  2. 在聲明的條件下錄製 瀏覽器性能 trace;配合 Chrome DevTools MCP 時,trace 摘要可一併帶上 CrUX 與本次 lab 指標。
  3. 只分析失敗指標相關 的 insights,再檢查牽涉的代碼與資源。
  4. 修復後 用等價的 lab 測量重跑;不要聲稱現場指標會立刻變好——CrUX 與一方 RUM 需要新的用戶訪問纔會更新。

若僅有源碼、沒有運行時證據,Skill 允許推斷可能原因,但 不得 在無證據時斷言 LCP、INP 或 CLS 一定不合格。

LCP:常見問題與檢查清單

LCP 度量最大可見內容元素完成繪製的時間,常見 LCP 元素包括首屏大圖/視頻、大段文字、背景圖或 <svg>。

文檔歸納的典型問題包括:TTFB 過高(> 800ms)、渲染阻塞 CSS/JS、LCP 資源發現過晚、客戶端渲染導致內容晚於 JS 纔出現,以及通過 Speculation Rules API 做可測量的「下一跳」導航優化(文檔強調不能替代修復當前頁 LCP,且需注意帶寬、副作用與 Chromium 限定)。

Skill 內附 LCP optimization checklist(TTFB、可發現性與 fetchpriority、圖片格式與尺寸、關鍵 CSS、字體 font-display、SSR/SSG、Speculation Rules 等),以及用 PerformanceObserver 在當前會話中定位 LCP 元素的調試片段(屬於單次 lab,非現場數據)。

INP 與 CLS:引用專項文檔

  • INP:要求把輸入延遲、處理時間、呈現延遲分開看;現場 INP 差或 trace 顯示慢交互時,閱讀 Skill 內 references/INP.md(trace 解讀、長任務、第三方與渲染原因、單會話 observer、一方歸因等)。
  • CLS:強調用現場歸因或 trace 找到 位移節點與觸發器,不要假設「肉眼看到的受害者」就是根因;現場 CLS 差時閱讀 references/CLS.md(預留空間、動態內容、字體與動畫、調試 observer、驗證清單)。

測量來源與邊界

來源 用途
瀏覽器性能 trace(Chrome DevTools MCP:performance_start_trace) 單次加載或交互診斷;可用附帶的 CrUX 上下文
CrUX 或 Search Console 聚合真實用戶 p75,定優先級
Lighthouse CLI 或 PageSpeed Insights 無 DevTools 時的受控 lab 回退
一方 RUM 按路由、設備、版本等切分線上體驗
原生 PerformanceObserver 調試單次會話

文檔明確:不要 用 Chrome DevTools MCP 的 lighthouse_audit 走性能(該能力面向非性能類 Lighthouse 類別);不要 把單次 lab 數值與現場 p75 當作同一總體直接對比。

安裝與啓用

官方在 officialskills.sh 給出的安裝方式爲:

npx skills add https://github.com/addyosmani/web-quality-skills --skill core-web-vitals

也可將 Skill 目錄鏈接交給編碼助手安裝:

https://github.com/addyosmani/web-quality-skills/tree/main/skills/core-web-vitals

Skill 本體爲通用 SKILL.md 格式;Cursor、Codex CLI、Claude Code 等具體 UI 差異以各產品當前對 npx skills add 或粘貼倉庫路徑的支持爲準,本文不展開未在官方頁覈實到的配置項。

典型用法(來自官方說明的可復現場景)

下列場景摘自 officialskills.sh 的 When to use it,與 Skill 文檔方向一致,可作爲對話入口示例:

  • 用 fetchpriority 等方式預加載 hero 圖,把 LCP 壓到 2.5s 以內。
  • 將長數組處理拆塊,避免點擊處理函數長時間阻塞主線程(改善 INP)。
  • 爲商品圖補 width/height,減少縮略圖網格跳動(CLS)。
  • 在廣告位注入前預留 min-height,避免廣告網絡異步插入導致佈局偏移。
  • 接入 web-vitals 庫並寫入 Google Analytics,跟蹤 p75 相關現場指標。

修復 LCP 時,文檔中的 HTML/JS 對比示例說明了:關鍵 CSS 內聯、非關鍵樣式延遲、preload + fetchpriority="high" 僅在與 trace 證明「發現過晚」時使用,以及用 SSR/SSG 替代純客戶端拉數渲染首屏內容。

適用場景與注意

適合誰:需要把 CWV 從「報表上的紅字」落到具體改動的前端與全棧開發者;已有 CrUX、Search Console 或一方 RUM,希望 Agent 按 Skill 流程先看 p75、再看 trace 的團隊。

限制與坑:

  • 無運行時證據時不要下結論;現場改善需要新訪問週期,修完只能先驗證 lab 等價測量。
  • Speculation Rules、部分 DevTools MCP 能力依賴 Chromium 生態;Safari/Firefox 行爲以各瀏覽器文檔爲準。
  • INP/CLS 的深入步驟在 Skill 引用的 INP.md、CLS.md 中,需與主 SKILL.md 一起使用。
  • 與同倉庫的 web-quality-audit(更廣的 Lighthouse 向審計)相比,本 Skill 專項 於 CWV 三項,路徑更短、更易在對話裏復現「指標 → 模式 → 補丁」的鏈條——這也是其相對通用性能建議更易被團隊傳播的原因之一(傳播效果本身未在官方資料中量化,此處僅爲工作方式對比)。

結尾

core-web-vitals 把 Google 公開的三項 Core Web Vitals 閾值、測量順序和 LCP/INP/CLS 的分工寫進 Agent 可遵循的 SKILL.md,並對接 CrUX、trace 與框架側常見反模式。若你正在處理搜索與體驗信號相關的性能工單,可從官方倉庫安裝並在對話中直接引用指標名稱或 URL。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜