mcpField
P
performance-budget

performance-budget

github.com/mohitagw15856测试与质量1.5k36 次安装5 天前更新
代码仓库

关于 performance-budget

用于为 Web 服务和应用编写可执行的性能预算。帮助团队定义前后端可量化的限制、测量方式、CI 强制检查及超标后的处理流程。

主要功能

  1. 01前后端性能目标
  2. 02用户旅程与资源预算
  3. 03测量和监控指南
  4. 04CI 性能检查门禁
  5. 05超标级别与响应流程

适用场景

  1. 01为关键用户旅程设定限制
  2. 02在 CI/CD 中加入性能检查
  3. 03明确指标超标后的团队行动

安装

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

$npx skills add https://github.com/mohitagw15856/pm-claude-skills --skill performance-budget

安装后在 Claude Code 中输入/performance-budget确认已加载。

详细介绍

性能预算技能

为 Web 服务或应用生成一份完整、可执行的性能预算文档。性能预算不是愿望清单,而是一组可衡量、可强制执行的约束,用于定义什么是“可接受的性能”,以及当这些约束被违反时由谁负责。

一份优秀的性能预算会回答:目标是什么、如何衡量、什么情况会触发调查,以及超出预算时会采取什么措施。

必要输入

如果尚未提供,请询问以下信息:

  • 服务名称和类型 — Web 应用、API 服务、移动应用或组合类型
  • 关键用户旅程 — 用户最重要的 3–5 个流程(例如“搜索 → 商品页 → 结账”)
  • 当前基准指标 — P50/P95/P99 延迟、LCP、CLS、INP(如有)(如果尚未收集,请注明“无基准数据”)
  • 技术栈 — 前端框架、后端语言/框架、CDN、数据库
  • 部署环境 — 云服务提供商、区域、边缘/CDN 配置
  • 成本限制 — 影响余量的预算或基础设施限制

输出格式


性能预算:[服务名称]

服务:[名称] | 团队:[团队名称] 最近更新:[日期] | 负责人:[姓名/角色] 环境:[生产环境/暂存环境基准] | 审核频率:[每季度/每个冲刺]


概述

[用 2–3 句话描述该服务、面向用户的性能要求,以及性能为何是优先事项。说明延迟对业务的影响,例如转化率、用户留存率、SLA 义务。]

性能理念:[例如:“性能是一项功能。每位工程师都有责任确保服务不超出预算。必须在 CI 中发现性能回退,避免其进入生产环境。”]


关键用户旅程

定义性能预算旨在保障的关键路径。

旅程 ID旅程名称入口点退出点重要性
UJ-1[例如:新用户注册][落地页][控制面板]关键
UJ-2[例如:核心工作流任务][例如:/app/tasks][例如:任务完成]高
UJ-3[例如:搜索并选择][例如:/search][例如:详情页]高
UJ-4[例如:获取 API 数据][例如:GET /api/items][例如:200 响应]中

前端性能预算

Web 和移动应用请填写本节。仅提供 API 的服务可跳过。

Core Web Vitals 目标

除非另有说明,目标适用于真实用户会话(现场数据)的第 75 百分位数,测量设备为中端 Android 设备,网络为 4G。

指标描述良好需要改进差我们的目标当前基准
LCP最大内容绘制 — 感知加载速度≤2.5s2.5–4.0s>4.0s[≤X.Xs][Xs/未测量]
INP下次绘制交互 — 响应能力≤200ms200–500ms>500ms[≤Xms][Xms/未测量]
CLS累积布局偏移 — 视觉稳定性≤0.10.1–0.25>0.25[≤0.X][X.XX/未测量]
FCP首次内容绘制≤1.8s1.8–3.0s>3.0s[≤X.Xs][Xs/未测量]
TTFB首字节时间≤800ms800ms–1.8s>1.8s[≤Xms][Xms/未测量]
页面体积预算
资源类型最大体积(压缩后)当前值状态
页面总体积[例如:500KB][XKB/未知][符合/超出/未知]
JavaScript(初始加载)[例如:200KB][XKB/未知][符合/超出/未知]
CSS[例如:50KB][XKB/未知][符合/超出/未知]
图片(首屏以上)[例如:150KB][XKB/未知][符合/超出/未知]
Web 字体[例如:50KB][XKB/未知][符合/超出/未知]
第三方脚本[例如:100KB][XKB/未知][符合/超出/未知]
按用户旅程划分的前端目标
用户旅程LCPINPCLSFCPTTFB
UJ-1:[用户旅程名称][≤Xs][≤Xms][≤0.X][≤Xs][≤Xms]
UJ-2:[用户旅程名称][≤Xs][≤Xms][≤0.X][≤Xs][≤Xms]
UJ-3:[用户旅程名称][≤Xs][≤Xms][≤0.X][≤Xs][≤Xms]

后端性能预算

API 延迟 SLO

目标在服务边界处测量(不包括客户端网络延迟)。

端点 / 操作方法P50P95P99最大值(硬性限制)错误率
[例如 /api/auth/login]POST[≤Xms][≤Xms][≤Xms][≤Xms][<X%]
[例如 /api/items]GET[≤Xms][≤Xms][≤Xms][≤Xms][<X%]
[例如 /api/items/:id]GET[≤Xms][≤Xms][≤Xms][≤Xms][<X%]
[例如 /api/items]POST[≤Xms][≤Xms][≤Xms][≤Xms][<X%]
[例如 后台作业:同步]—[≤Xs][≤Xs][≤Xs][≤Xs][<X%]

整体服务 SLO:

SLO目标测量窗口
可用性[99.X%]滚动 30 天
P95 延迟(所有端点)[≤Xms]滚动 30 天
错误率(5xx)[<X%]滚动 30 天
吞吐量(持续)[≥X req/s]高峰时段
数据库查询预算
查询 / 操作P50P95最大值备注
[例如 按 ID 查找用户][≤Xms][≤Xms][≤Xms]在 user_id 上建立索引
[例如 列出用户的项目][≤Xms][≤Xms][≤Xms]分页,最多 100 行
[例如 全文搜索][≤Xms][≤Xms][≤Xms]Elasticsearch / pg_trgm

测量方法

真实用户监控(RUM)

工具: [例如 Google CrUX、SpeedCurve、Datadog RUM、Sentry Performance、自定义工具] 数据来源: [真实用户的现场数据 / 合成测试的实验室数据 / 两者] 采样率: [X% 的会话] 访问方式: [仪表板 URL 或工具访问说明]

测量内容:

  • 按页面和用户旅程统计核心 Web 指标(LCP、INP、CLS)
  • 业务关键交互的自定义性能标记
  • 关键资源的资源计时
  • 长任务(主线程上 >50ms)
合成监控

工具: [例如 Lighthouse CI、WebPageTest、k6、Artillery、带性能断言的 Playwright] 频率: [每 X 分钟 / 每次部署时 / 每晚] 测试位置: [例如 eu-west-1、us-east-1] 设备配置: [桌面端 10Mbps / 移动端 4G Moto G4 / 两者]

合成测试套件位置: [测试文件链接]

后端可观测性

APM 工具: [例如 Datadog、Grafana + Prometheus、New Relic、AWS X-Ray] 收集的指标:

  • 按端点统计请求率、错误率、持续时间(RED 指标)
  • 数据库查询持续时间和连接池利用率
  • 缓存命中率 / 未命中率
  • 后台作业队列深度和处理延迟

仪表板: [主要性能仪表板链接]


CI/CD 性能强制检查

性能预算通过以下两个关卡强制执行:

关卡 1 — 构建时 Bundle 分析

工具: [例如 bundlesize、size-limit、带 CI 断言的 webpack-bundle-analyzer] 配置文件: [[.bundlesizerc / .size-limit.js / etc.]] 触发条件: 每个目标为 main 的 PR 是否阻止合并: 是 — 如果超出 Bundle 大小预算,PR 无法合并

// Example .size-limit.js
[
  {
    "path": "dist/js/*.js",
    "limit": "200 KB"
  },
  {
    "path": "dist/css/*.css",
    "limit": "50 KB"
  }
]
关卡 2 — CI 中的合成性能测试

工具: [例如 Lighthouse CI、k6、Artillery] 触发条件: 部署到 staging 时 是否阻止发布: 是 — 如果阈值不达标,则阻止发布到生产环境 检查的阈值:

  • LCP ≤ [Xs]
  • CLS ≤ [0.X]
  • API P95 延迟 ≤ [Xms]
  • 错误率 < [X%]

CI 配置位置: [[.github/workflows/perf.yml / ci/performance.yaml]]

如何在本地运行:

# Run Lighthouse CI against local build
[command — e.g. lhci autorun --config=lighthouserc.js]

# Run load test locally
[command — e.g. k6 run load-tests/api-smoke.js]

预算超标响应流程

当测量指标超过目标并持续 [连续 X 次测量 / 持续 X 分钟 / 单次部署] 时,即视为预算超标。

超限严重程度级别
严重程度条件响应时间处理人员
P1 — 严重生产环境中超过预算阈值的 2 倍立即值班工程师 + 团队负责人
P2 — 高生产环境中超过预算阈值的 1.5 倍4 小时内值班工程师
P3 — 中生产环境中超过阈值1 个冲刺内PR 作者 + 团队
P4 — 低仅在预发布环境中超过阈值合并前PR 作者
超限调查清单

检测到超限时,请按顺序完成以下检查:

1. 找出导致回归的提交

# Compare performance across recent deploys
[command — e.g. datadog metrics query, lighthouse-ci compare, git bisect]

2. 对超限情况进行分类

  • 是否由代码变更导致?(新功能、重构、依赖项升级)
  • 是否由基础设施变更导致?(新实例类型、配置变更)
  • 是否由外部因素导致?(CDN 问题、DNS、上游依赖项)
  • 是否属于测量异常?(测试环境问题、样本量)

3. 立即采取的措施

  • 如果生产环境中发生 P1/P2 级超限,且已确认由代码导致:回滚或禁用功能标志
  • 如果原因未知:不要立即回滚,先收集更多数据
  • 在 [#performance / #incidents Slack 频道] 中通知相关人员,并提供:指标名称、当前值、预算目标、疑似原因

4. 解决问题

  • 修复根本原因,不要只调整预算阈值
  • 只有经过团队讨论并获得 [技术负责人 / 工程经理] 明确批准后,才能更改预算阈值
  • 在 [性能日志 / 事件记录] 中记录超限情况

预算变更政策: 只有满足以下条件时,才能放宽预算阈值:(a)导致性能回归的功能具有可衡量的业务价值,且其价值超过性能成本;(b)变更经过审查并获得 [技术负责人] 批准。


性能审查周期

触发条件操作
每个冲刺审查 P95/P99 延迟趋势;标记任何逐渐恶化的情况
每季度全面审查性能预算——更新基线、调整目标、审计工具
重大功能上线后重新测量所有 Core Web Vitals 和 API SLO;更新基线
基础设施变更后重新运行完整的合成测试套件;确认没有回归
依赖项升级后运行包体积差异检查;确认体积没有意外增加

下次计划审查: [日期] 审查负责人: [姓名 / 职务]


质量检查

  • 每个预算阈值都是具体数值,而不是范围或“TBD”
  • 已定义前端(如适用)和后端目标,而不是只定义其中一项
  • 已注明测量工具,并附上仪表板或配置文件的链接
  • 已为至少一个关卡(构建时或部署时)配置 CI 强制检查
  • 预算超限响应流程明确列出具体的 Slack 频道和负责人
  • 预算阈值基于基线测量结果或合理目标,而不是凭空设定
  • 已为关键用户旅程定义各自的目标,而不只是全局平均值

反模式

  • 不要在测量当前基线前设置预算阈值——目标必须以实际情况为依据
  • 不要只定义全局平均值——关键用户旅程需要单独的预算,因为它们的表现可能存在显著差异
  • 不要省略 CI 强制检查——如果性能预算未在构建流水线中强制执行,就不会得到遵守
  • 不要让超限响应流程缺少明确的负责人和升级渠道
  • 不要只为一个环境设置预算——如果生产环境和预发布环境的目标不同,应分别记录

评论

支持 Markdown