mcpField
D
debug-optimize-lcp

debug-optimize-lcp

github.com/chromedevtools开发54.4k3.6k 次安装今天更新
代码仓库

关于 debug-optimize-lcp

debug-optimize-lcp 是一套用于排查和优化网页最大内容绘制(LCP)的技能,面向网页性能开发工作流。它按 LCP 子阶段分析性能追踪、资源加载和渲染延迟,并提供验证优化效果的步骤。

主要功能

  1. 01记录页面性能追踪
  2. 02分析 LCP 子阶段与洞察
  3. 03识别 LCP 元素及资源
  4. 04检查网络瀑布与页面问题
  5. 05模拟网络和 CPU 限制

适用场景

  1. 01查明 LCP 延迟所在阶段
  2. 02定位延迟加载的首屏图片
  3. 03检查阻塞渲染的资源
  4. 04比较优化前后的 LCP 追踪

MCP 相关

使用 Chrome DevTools 工具进行性能追踪、洞察分析、网络请求检查和页面脚本评估。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/chromedevtools/chrome-devtools-mcp --skill debug-optimize-lcp

安装后在 Claude Code 中输入/debug-optimize-lcp确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
elements-and-size.md
lcp-breakdown.md
lcp-snippets.md
optimization-strategies.md

详细介绍

什么是 LCP,以及它为何重要

最大内容绘制(LCP)用于衡量页面主要内容显示的速度。它指的是从导航开始到视口中最大的图像或文本块完成渲染所用的时间。

  • 良好:2.5 秒或更短
  • 需要改进:2.5–4.0 秒
  • 较差:超过 4.0 秒

LCP 是一项核心网页指标,会直接影响用户体验和搜索排名。在 73% 的移动页面中,LCP 元素都是图像。

LCP 子项拆解

每个页面的 LCP 都可拆解为依次发生、互不间断且不重叠的四个子项。了解哪个子项是瓶颈,是有效优化的关键。

子项理想占比(LCP)衡量内容
首字节时间(TTFB)~40%导航开始 → 收到 HTML 的第一个字节
资源加载延迟<10%TTFB → 浏览器开始加载 LCP 资源
资源加载时长~40%下载 LCP 资源所用的时间
元素渲染延迟<10%LCP 资源下载完成 → LCP 元素完成渲染

“延迟”子项应尽可能接近零。如果任一延迟子项相较于 LCP 总时长占比较大,应优先从这里着手优化。

常见误区:优化某个子项(例如压缩图像以缩短加载时长),却没有检查其他子项。如果真正的瓶颈是渲染延迟,缩小图像并无帮助——节省的时间只会转移到渲染延迟上。

调试工作流

按顺序执行以下步骤。每一步都以前一步为基础。

步骤 1:记录性能跟踪

导航到页面,然后记录一次包含重新加载的跟踪,以捕获完整的页面加载过程,包括 LCP:

  1. 使用 pageId 调用 navigate_page,导航到目标 URL。
  2. 使用 pageId、reload: true 和 autoStop: true 调用 performance_start_trace。

跟踪结果将包含 LCP 时间和可用的洞察集。记下输出中的洞察集 ID——下一步会用到。

步骤 2:分析 LCP 洞察

使用 performance_analyze_insight 深入分析 LCP 专属洞察。在跟踪结果中查找以下洞察名称:

  • LCPBreakdown — 显示四个 LCP 子项及其各自的耗时。
  • DocumentLatency — 影响 TTFB 的服务器响应时间问题。
  • RenderBlocking — 阻止 LCP 元素渲染的资源。
  • LCPDiscovery — LCP 资源是否能被提前发现。

使用 pageId、洞察集 ID,以及跟踪结果中的洞察名称调用 performance_analyze_insight。

步骤 3:识别 LCP 元素

使用 evaluate_script(附带 pageId)和 references/lcp-snippets.md 中的 “识别 LCP 元素”代码片段,查看 LCP 元素的标签、资源 URL 和原始时间数据。

url 字段会告诉你要在网络瀑布图中查找哪个资源。如果 url 为空,说明 LCP 元素是文本内容(无需加载资源)。

步骤 4:检查网络瀑布图

使用 list_network_requests 查看 LCP 资源相对于其他资源的加载时间:

  • 使用 pageId 调用 list_network_requests,并通过 resourceTypes: ["image", "font"] 进行筛选(根据步骤 3 的结果调整)。
  • 然后使用 pageId 和 LCP 资源的请求 ID 调用 get_network_request,查看完整详情。

关键检查项:

  • 开始时间:与 HTML 文档和第一个资源进行比较。如果 LCP 资源的开始时间比第一个资源晚很多,就存在需要消除的资源加载延迟。
  • 持续时间:资源加载时长较长,说明文件过大或服务器速度较慢。
步骤 5:检查 HTML 中的常见问题

使用 evaluate_script(带 pageId)以及 references/lcp-snippets.md 中的 "Audit Common Issues" 代码片段,检查视口中延迟加载的图片、缺失的 fetchpriority 以及阻塞渲染的脚本。

优化策略

在确定瓶颈子部分后,应用以下按优先级排序的修复措施。

1. 消除资源加载延迟(目标:<10%)

这是最常见的瓶颈。LCP 资源应立即开始加载。

  • 根本原因:LCP 图片通过 JS/CSS 加载、使用 data-src,或设置了 loading="lazy"。
  • 修复:使用带 src 的标准 <img>。切勿对 LCP 图片进行延迟加载。
  • 修复:如果图片在 HTML 中无法被发现,添加 <link rel="preload" fetchpriority="high">。
  • 修复:为 LCP <img> 标签添加 fetchpriority="high"。
2. 消除元素渲染延迟(目标:<10%)

元素应在加载后立即渲染。

  • 根本原因:大型样式表、<head> 中的同步脚本,或主线程阻塞。
  • 修复:内联关键 CSS,延迟非关键 CSS/JS。
  • 修复:拆分阻塞主线程的长任务。
  • 修复:使用服务端渲染(SSR),使元素存在于初始 HTML 中。
3. 缩短资源加载时长(目标:约 40%)

让资源更小或传输更快。

  • 修复:使用现代格式(WebP、AVIF)和响应式图片(srcset)。
  • 修复:通过 CDN 提供资源。
  • 修复:设置 Cache-Control 响应头。
  • 修复:如果 LCP 是受网络字体阻塞的文本,使用 font-display: swap。
4. 降低 TTFB(目标:约 40%)

HTML 文档本身到达时间过长。

  • 修复:尽量减少重定向并优化服务器响应时间。
  • 修复:在边缘(CDN)缓存 HTML。
  • 修复:确保页面符合往返缓存(bfcache)的条件。

验证修复与模拟

  • 验证:重新运行追踪(performance_start_trace,带 pageId 和 reload: true),并比较新的子部分分解。瓶颈应有所缩小。
  • 模拟:实验室测量结果与真实体验不同。使用 emulate 在约束条件下进行测试:
    • 使用 emulate,带 pageId、networkConditions: "Fast 3G" 和 cpuThrottlingRate: 4。
    • 这可揭示仅在较慢连接/设备上才会显现的问题。

评论

支持 Markdown