mcpField
D
debug-optimize-lcp

debug-optimize-lcp

github.com/gsmlg-dev开发036 次安装3 周前更新
代码仓库

关于 debug-optimize-lcp

debug-optimize-lcp 是一项用于分析和优化网页最大内容绘制(LCP)的技能,面向排查网页加载性能的开发者。它通过性能跟踪和网络请求分析定位延迟环节,并在修改后重新测量。

主要功能

  1. 01记录页面加载性能跟踪
  2. 02分析 LCP 各阶段及相关洞察
  3. 03识别 LCP 元素并检查网络请求
  4. 04检查常见图片、脚本和渲染问题
  5. 05重新跟踪并模拟较慢设备与网络

适用场景

  1. 01定位首屏主内容显示缓慢的原因
  2. 02判断延迟来自服务器、资源加载还是渲染
  3. 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.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. 对目标 URL 执行 navigate_page。
  2. 使用 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。
    • 这可以发现仅在较慢网络连接/设备上才会出现的问题。

评论

支持 Markdown