关于 debug-optimize-lcp
debug-optimize-lcp 是一项用于分析和优化网页最大内容绘制(LCP)的技能,面向排查网页加载性能的开发者。它通过性能跟踪和网络请求分析定位延迟环节,并在修改后重新测量。
主要功能
- 01记录页面加载性能跟踪
- 02分析 LCP 各阶段及相关洞察
- 03识别 LCP 元素并检查网络请求
- 04检查常见图片、脚本和渲染问题
- 05重新跟踪并模拟较慢设备与网络
适用场景
- 01定位首屏主内容显示缓慢的原因
- 02判断延迟来自服务器、资源加载还是渲染
- 03在优化后比较 LCP 阶段耗时
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gsmlg-dev/ code-agent --skill debug-optimize-lcp安装后在 Claude Code 中输入/debug-optimize-lcp确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/elements-and-size.mdlcp-breakdown.mdlcp-snippets.mdoptimization-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:
- 对目标 URL 执行
navigate_page。 - 使用
reload: true和autoStop: true执行performance_start_trace。
跟踪结果将包含 LCP 计时和可用的洞察集。记下输出中的洞察集 ID,下一步会用到。
步骤 2:分析 LCP 洞察
使用 performance_analyze_insight 深入查看 LCP 相关洞察。在跟踪结果中查找以下洞察名称:
- LCPBreakdown — 显示四个 LCP 子部分及各自的计时。
- DocumentLatency — 影响 TTFB 的服务器响应时间问题。
- RenderBlocking — 阻止 LCP 元素渲染的资源。
- LCPDiscovery — LCP 资源是否能够较早被发现。
使用跟踪结果中的洞察集 ID 和洞察名称调用 performance_analyze_insight。
步骤 3:识别 LCP 元素
使用 evaluate_script 执行 references/lcp-snippets.md 中的 “Identify LCP Element”代码片段,以显示 LCP 元素的标签、资源 URL 和原始计时数据。
url 字段会告诉你应在网络瀑布图中查找哪个资源。如果 url 为空,则 LCP 元素是文本(无需加载资源)。
步骤 4:检查网络瀑布图
使用 list_network_requests 查看 LCP 资源相对于其他资源的加载时间:
- 使用
resourceTypes: ["Image", "Font"]筛选后调用list_network_requests(根据步骤 3 调整筛选条件)。 - 然后使用 LCP 资源的请求 ID 调用
get_network_request,查看完整详情。
重点检查:
- 开始时间:与 HTML 文档及第一个资源进行比较。如果 LCP 资源的加载开始时间远晚于第一个资源,就存在需要消除的资源加载延迟。
- 时长:资源加载时长较长,通常意味着文件过大或服务器速度较慢。
步骤 5:检查 HTML 中的常见问题
使用 evaluate_script 执行 references/lcp-snippets.md 中的 “Audit Common Issues”代码片段,检查视口内延迟加载的图像、缺少的 fetchpriority,以及阻塞渲染的脚本。
优化策略
确定瓶颈子项后,按以下优先级进行修复。
1. 消除资源加载延迟(目标:<10%)
这是最常见的瓶颈。LCP 资源应立即开始加载。
- 根本原因:通过 JS/CSS 加载 LCP 图片、使用
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 文本被 Web 字体阻塞,请使用
font-display: swap。
4. 降低 TTFB(目标:~40%)
HTML 文档本身的到达时间过长。
- 修复:尽量减少重定向并优化服务器响应时间。
- 修复:在边缘节点缓存 HTML(CDN)。
- 修复:确保页面符合后退/前进缓存(bfcache)的使用条件。
验证修复与模拟
- 验证:重新运行跟踪(使用
reload: true调用performance_start_trace),并比较新的子项细分。瓶颈应有所缩小。 - 模拟:实验室测量结果与真实体验有所不同。使用
emulate在受限条件下进行测试:- 使用
networkConditions: "Fast 3G"和cpuThrottlingRate: 4调用emulate。 - 这可以发现仅在较慢网络连接/设备上才会出现的问题。
- 使用