SKILL.md
只读
名称
web-perf
描述
使用 Chrome DevTools MCP 分析网页性能。测量核心网页指标(LCP、INP、CLS)和辅助指标(FCP、TBT、速度指数),识别渲染阻塞资源、网络依赖链、布局偏移、缓存问题和可访问性差距。当被要求审计、分析、调试或优化页面加载性能、Lighthouse 分数或网站速度时使用。倾向于从当前文档中检索,而非依赖预训练知识。
网页性能审计
你对网页性能指标、阈值和工具 API 的知识可能已过时。在引用具体数字或建议时,优先检索而非预训练知识。
检索来源
| 来源 | 如何检索 | 用途 |
|---|---|---|
| web.dev | https://web.dev/articles/vitals |
核心网页指标阈值、定义 |
| Chrome DevTools 文档 | https://developer.chrome.com/docs/devtools/performance |
工具 API、跟踪分析 |
| Lighthouse 评分 | https://developer.chrome.com/docs/lighthouse/performance/performance-scoring |
分数权重、指标阈值 |
首先:验证 MCP 工具是否可用
在开始前运行此步骤。 尝试调用 navigate_page 或 performance_start_trace。如果不可用,停止——chrome-devtools MCP 服务器未配置。
请用户将其添加到 MCP 配置中:
"chrome-devtools": {
"type": "local",
"command": ["npx", "-y", "chrome-devtools-mcp@latest"]
}
关键指南
- 果断断言:通过检查网络请求、DOM 或代码库来验证声明——然后明确陈述发现。
- 先验证再建议:在建议移除前确认某物未被使用。
- 量化影响:使用来自洞察的预估节省。不要优先处理影响为 0ms 的更改。
- 跳过非问题:如果渲染阻塞资源的预估影响为 0ms,则注明但不建议操作。
- 具体明确:说“将 hero.png(450KB)压缩为 WebP”,而不是“优化图片”。
- 严格排序:一个 LCP 为 200ms 且 CLS 为 0 的网站已经非常优秀——直接说明。
快速参考
| 任务 | 工具调用 |
|---|---|
| 加载页面 | navigate_page(url: "...") |
| 开始跟踪 | performance_start_trace(autoStop: true, reload: true) |
| 分析洞察 | performance_analyze_insight(insightSetId: "...", insightName: "...") |
| 列出请求 | list_network_requests(resourceTypes: ["Script", "Stylesheet", ...]) |
| 请求详情 | get_network_request(reqid: <id>) |
| 可访问性快照 | take_snapshot(verbose: true) |
工作流程
复制此清单以跟踪进度:
审计进度:
- [ ] 阶段 1:性能跟踪(导航 + 记录)
- [ ] 阶段 2:核心网页指标分析(包括 CLS 罪魁祸首)
- [ ] 阶段 3:网络分析
- [ ] 阶段 4:可访问性快照
- [ ] 阶段 5:代码库分析(如果是第三方网站则跳过)
阶段 1:性能跟踪
-
导航到目标 URL:
navigate_page(url: "<target-url>") -
启动带重新加载的性能跟踪以捕获冷加载指标:
performance_start_trace(autoStop: true, reload: true) -
等待跟踪完成,然后检索结果。
故障排除:
- 如果跟踪返回空或失败,先用
navigate_page验证页面是否正确加载 - 如果洞察名称不匹配,检查跟踪响应以列出可用洞察
阶段 2:核心网页指标分析
使用 performance_analyze_insight 提取关键指标。
注意: 洞察名称可能因 Chrome DevTools 版本而异。如果某个洞察名称无效,请从跟踪响应中的 insightSetId 发现可用洞察。
常见洞察名称:
| 指标 | 洞察名称 | 查找内容 |
|---|---|---|
| LCP | LCPBreakdown |
最大内容绘制时间;TTFB、资源加载、渲染延迟的分解 |
| CLS | CLSCulprits |
导致布局偏移的元素(无尺寸的图片、注入内容、字体切换) |
| 渲染阻塞 | RenderBlocking |
阻塞首次绘制的 CSS/JS |
| 文档延迟 | DocumentLatency |
服务器响应时间问题 |
| 网络依赖 | NetworkRequestsDepGraph |
延迟关键资源的请求链 |
示例:
performance_analyze_insight(insightSetId: "<id-from-trace>", insightName: "LCPBreakdown")
关键阈值(良好/需改进/较差):
- TTFB:< 800ms / < 1.8s / > 1.8s
- FCP:< 1.8s / < 3s / > 3s
- LCP:< 2.5s / < 4s / > 4s
- INP:< 200ms / < 500ms / > 500ms
- TBT:< 200ms / < 600ms / > 600ms
- CLS:< 0.1 / < 0.25 / > 0.25
- 速度指数:< 3.4s / < 5.8s / > 5.8s
阶段 3:网络分析
列出所有网络请求以识别优化机会:
list_network_requests(resourceTypes: ["Script", "Stylesheet", "Document", "Font", "Image"])
查找:
- 渲染阻塞资源:
<head>中没有async/defer/media属性的 JS/CSS - 网络链:由于依赖其他资源先加载而发现较晚的资源(例如 CSS 导入、JS 加载的字体)
- 缺少预加载:未预加载的关键资源(字体、首屏图片、关键脚本)
- 缓存问题:缺少或弱化的
Cache-Control、ETag或Last-Modified头 - 大负载:未压缩或过大的 JS/CSS 包
- 未使用的预连接:如果被标记,通过检查是否有任何请求发往该源来验证。如果请求数为零,则确定未使用——建议移除。如果存在请求但加载较晚,预连接可能仍有价值。
获取详细请求信息:
get_network_request(reqid: <id>)
阶段 4:可访问性快照
获取可访问性树快照:
take_snapshot(verbose: true)
标记高级别差距:
- 缺失或重复的 ARIA ID
- 对比度差的元素(对照 WCAG AA:普通文本 4.5:1,大文本 3:1)
- 焦点陷阱或缺失焦点指示器
- 没有可访问名称的交互元素
阶段 5:代码库分析
如果审计的是第三方网站且无法访问代码库,则跳过。
分析代码库以了解可以在哪些方面进行改进。
检测框架和打包工具
搜索配置文件以识别技术栈:
| 工具 | 配置文件 |
|---|---|
| Webpack | webpack.config.js, webpack.*.js |
| Vite | vite.config.js, vite.config.ts |
| Rollup | rollup.config.js, rollup.config.mjs |
| esbuild | esbuild.config.js, 包含 esbuild 的构建脚本 |
| Parcel | .parcelrc, package.json(parcel 字段) |
| Next.js | next.config.js, next.config.mjs |
| Nuxt | nuxt.config.js, nuxt.config.ts |
| SvelteKit | svelte.config.js |
| Astro | astro.config.mjs |
同时检查 package.json 中的框架依赖和构建脚本。
Tree-Shaking 和死代码
- Webpack:检查
mode: 'production'、package.json中的sideEffects、usedExports优化 - Vite/Rollup:默认启用 Tree-shaking;检查
treeshake选项 - 查找:桶文件(
index.js重新导出)、整体导入的大型工具库(lodash、moment)
未使用的 JS/CSS
- 检查 CSS-in-JS 与静态 CSS 提取
- 查找 PurgeCSS/UnCSS 配置(Tailwind 的
content配置) - 识别动态导入与急切加载
Polyfills
- 检查
@babel/preset-env目标和useBuiltIns设置 - 查找
core-js导入(通常过大) - 检查
browserslist配置是否目标过于宽泛
压缩和混淆
- 检查
terser、esbuild或swc混淆 - 检查构建输出或服务器配置中的 gzip/brotli 压缩
- 检查生产构建中的 source map(应为外部或禁用)
输出格式
按以下方式呈现发现:
- 核心网页指标摘要 - 包含指标、值和评级(良好/需改进/较差)的表格
- 主要问题 - 按预估影响(高/中/低)排序的问题列表
- 建议 - 具体的、可操作的修复方案,附代码片段或配置更改
- 代码库发现 - 检测到的框架/打包工具、优化机会(如无法访问代码库则省略)






