Community研究与数据分析github.com

nimajafari/lighthouse-skill

用于运行 Google Lighthouse 的 Agent 技能——测量并验证网页质量(性能、无障碍、SEO、最佳实践):CLI、预算、CI、编程 API。

lighthouse-skill 是什么?

这个技能让 AI Agent 能够直接运行 Google Lighthouse,测量任意 URL 的网页质量,涵盖性能、无障碍、SEO 和最佳实践四大类别。它提供 CLI 命令行工具和推荐的中位运行脚本,通过多次运行取中位值来降低单次测量的方差,输出结构化的 JSON 数据,包含分类得分和具体失败的审核条目。该技能特别适合在 CI/CD 流水线中使用,可以设置性能预算(LightWallet)来门控构建,或与修复技能配合形成“测量→修复→重新测量”的迭代循环。它支持 Headless 模式和多项关键标志(如桌面端预设、自定义限制模式),并提供了详细的 JSON 解析命令和预算配置示例。用户需要注意,Lighthouse 是实验室工具,结果代表模拟环境下的表现,真实用户数据应参考 CrUX 等现场来源。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add nimajafari/lighthouse-skill

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Lighthouse

运行 Google Lighthouse 来测量网页质量,并验证修复是否真正推动了指标。Lighthouse 对 URL 进行性能、无障碍、SEO 和最佳实践方面的审计,返回每个类别的 0–100 分以及一份包含具体建议的失败审核列表。

何时使用此技能

该技能负责测量。配套的质量技能负责修复。工作流是一个循环:

测量(此技能) → 修复(性能/无障碍/SEO/最佳实践) → 重新测量

当需要获取基准分数、找出具体失败的审核、设置性能预算、在 CI 中门控构建,或证明某次改动提高了(或降低了)指标时,请使用此技能。不要猜测改进——先测量,改动一处,再测量一次。

工作原理

  1. 选择一个目标 URL——可以是已部署的 URL,也可以是本地开发/预览服务器(如 http://localhost:3000)。
  2. 运行 Lighthouse——优先使用 scripts/run-lighthouse.sh <url>;它会运行多次,取中位值,并输出紧凑的 JSON(完整报告过于庞大且浪费上下文)。
  3. 从 JSON 中读取分类得分和失败审核。
  4. 将每个失败审核映射到相应的修复技能。
  5. 重新运行,并报告前后差值。

安装与运行(CLI)

Lighthouse 的 README 推荐全局安装(需要 Node 22 LTS+),并且它需要驱动本地已安装的 Chrome/Chromium:

npm install -g lighthouse
# 或:yarn global add lighthouse

lighthouse https://example.com --view    # 基本运行;--view 打开 HTML 报告

Lighthouse 会自动检测已安装的 Chrome;也可以通过 CHROME_PATH 环境变量指定特定的二进制文件。

如果想快速一次性地运行,而不进行全局安装,也可以使用 npx lighthouse <url>——发布的 CLI 二进制文件支持此用法,尽管官方文档只介绍了全局安装方式。

面向 Agent 的机器可读运行(JSON 输出到文件,静音,无头模式):

npx lighthouse https://example.com \
  --quiet \
  --chrome-flags="--headless=new" \
  --only-categories=performance,accessibility,seo,best-practices \
  --output=json --output-path=./lh.json

包装脚本(推荐)

scripts/run-lighthouse.sh 对 CLI 进行了封装,运行 N 次,选择中位运行(Lighthouse 推荐的做法以减少方差),并将紧凑的 JSON 打印到标准输出——仅包含分类得分和失败审核。人类可读的日志则输出到标准错误。

# 用法:run-lighthouse.sh <url> [运行次数] [类别]
skills/lighthouse/scripts/run-lighthouse.sh https://example.com 3
skills/lighthouse/scripts/run-lighthouse.sh http://localhost:3000 5 performance,accessibility

示例输出:

{
  "success": true,
  "url": "https://example.com",
  "runs": 3,
  "lighthouseVersion": "13.x",
  "scores": { "performance": 78, "accessibility": 95, "seo": 92, "best-practices": 96 },
  "failingAudits": [
    { "id": "largest-contentful-paint", "score": 0.4, "displayValue": "4.2 s" },
    { "id": "unused-javascript", "score": 0.3, "displayValue": "Potential savings of 180 KiB" }
  ]
}

关键标志

标志用途
`--output=jsonhtml
--output-path=<path>报告写入路径
--only-categories=…限制为 performance,accessibility,seo,best-practices
--preset=desktop桌面端配置(默认是移动端:模拟中端手机 + 慢速 4G)
--chrome-flags="--headless=new"无头模式运行(CI/服务器)
--budget-path=budget.json强制执行性能预算(LightWallet)
`--throttling-method=simulatedevtools
--quiet抑制进度日志
--view运行完成后打开 HTML 报告

读取 JSON

得分是以 0–1 的浮点数表示,位于 categories 下;审核详情位于 audits 下。

# 分类得分(0–1)→ 乘以 100 得到熟悉的百分制分数
jq '.categories | to_entries | map({(.key): (.value.score)}) | add' lh.json

# 核心网页指标(实验室值)
jq '.audits | {
  LCP: .["largest-contentful-paint"].displayValue,
  CLS: .["cumulative-layout-shift"].displayValue,
  TBT: .["total-blocking-time"].displayValue
}' lh.json

# 值得关注的失败/优化审核
jq '[.audits[] | select(.score != null and .score < 0.9)
     | {id, score, displayValue}]' lh.json

性能预算(LightWallet)

当资源或时间超过阈值时,判定运行失败。此技能附带了一个可直接编辑的 examples/budget.json 文件;其格式如下:

[
  {
    "path": "/*",
    "timings": [
      { "metric": "largest-contentful-paint", "budget": 2500 },
      { "metric": "interactive", "budget": 3800 }
    ],
    "resourceSizes": [
      { "resourceType": "script", "budget": 300 },
      { "resourceType": "stylesheet", "budget": 100 },
      { "resourceType": "image", "budget": 500 },
      { "resourceType": "total", "budget": 1500 }
    ],
    "resourceCounts": [
      { "resourceType": "third-party", "budget": 10 }
    ]
  }
]
lighthouse https://example.com --budget-path=budget.json --output=json --output-path=./lh.json

大小单位为 KB,时间单位为 ms。预算结果会出现在 JSON 中的 performance-budget 和 timing-budget 审核条目下。

实验室数据 vs. 现场数据——在使用数值前请阅读此内容

Lighthouse 是一个实验室工具:一次模拟加载,使用模拟硬件,配合模拟节流。它可重复性好,非常适合发现回归,但不等于真实用户体验。

  • 方差真实存在。 单次运行可能波动 ±5–10 分。请至少运行 3 次并取中位值(包装脚本已实现此功能)。
  • 如需真实用户数据,请使用现场来源:CrUX、PageSpeed Insights(同时显示实验室和现场数据)、Search Console 的核心网页指标报告,或 web-vitals 库上报到您的分析系统。
  • INP 无法在单次 Lighthouse 加载中测量——它需要真实的用户交互。Lighthouse 报告总阻塞时间(TBT)作为其实验室代理指标;请以现场 INP 数据为准。

Lighthouse v13 说明(Insight Audits)

自 v13(2025 年 10 月+)起,Lighthouse 将性能迁移到了 Insight Audits。多个原有的针对特定优化的审核 ID 被合并或移除(例如 CLS 相关审核 → cls-culprits-insight,图片审核 → image-delivery-insight)。建议内容未变,仅审核 ID 和报告分组发生了变化。在解析旧报告时,将其视为超集而非矛盾。在 CI 中固定 Lighthouse 版本,以确保您依赖的审核 ID 保持稳定。

性能得分是如何构成的

性能得分是多个实验室指标的加权组合(权重在不同版本间会有变化)。在最近版本中,主要指标大致如下:

指标近似权重
总阻塞时间(TBT)~30%
最大内容绘制时间(LCP)~25%
累计布局偏移(CLS)~25%
首次内容绘制时间(FCP)~10%
速度指数~10%

由于 TBT/LCP/CLS 占主导地位,修复它们能最大程度地提高得分。使用 Lighthouse 得分计算器 可以精确了解某个指标变化如何映射到得分上。

CI 与编程 API

为了方便查阅,以下内容以引用形式给出:

  • 持续集成——@lhci/cli、lighthouserc.js 断言以及 GitHub Actions 工作流:references/CI.md
  • 编程(Node)API——使用 chrome-launcher 驱动 Lighthouse,支持自定义流程、用户流程和批量运行:references/PROGRAMMATIC-API.md

将审核映射到修复技能

Lighthouse 分类使用以下技能修复
性能 / 核心网页指标性能或核心网页指标技能
无障碍无障碍 / WCAG 技能
SEOSEO 技能
最佳实践安全 / 最佳实践技能

此技能与 addyosmani/web-quality-skills 配合使用,构成循环的修复部分。

参考

相关技能