关于 performance-optimization
performance-optimization 面向尚未定位瓶颈的性能问题,将现有证据整理为聚焦的调优简报,提出有限改动并规划效果验证。
主要功能
- 01归类症状与衡量目标
- 02将跟踪和报告整理为调优简报
- 03选择一个主要调优模式
- 04定位瓶颈并提出有限改动
- 05验证改动前后的效果
- 06将相邻任务转交其他技能
适用场景
- 01排查页面、API、查询或帧率缓慢
- 02分析性能跟踪或基准差异
- 03规划针对性的性能测量
- 04在优化与调试任务间分流
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill performance-optimization安装后在 Claude Code 中输入/performance-optimization确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
SKILL.toonevals/evals.jsonreferences/handoff-boundaries.mdintake-packets-and-escalations.mdmeasurement-checklist.mdtuning-modes.md详细介绍
性能优化
当核心问题是**“我们应该相信哪个产物、实际瓶颈在哪里,以及首先值得尝试的最小调优措施是什么?”**时,使用此技能。
这项工作的目的不是罗列泛泛的 React、SQL、缓存或游戏性能建议。 而是对问题进行分类,将当前产物整理成一份调优简报,选定一种主要模式,指出一个瓶颈,推荐一到两项高杠杆改动,然后验证改动前后的影响,并妥善转交剩余工作。
处理不熟悉的产物资料包前,请先阅读 references/intake-packets-and-escalations.md。
处理不熟悉的性能问题前,请先阅读 references/tuning-modes.md。
判断下一步应由 performance-optimization、monitoring-observability、debugging、testing-strategies、code-refactoring 还是 game-performance-profiler 负责时,请阅读 references/handoff-boundaries.md。
编写基准测试或性能分析计划前,请先阅读 references/measurement-checklist.md。
何时使用此技能
- 交互、页面加载、路由切换、API 热路径、查询计划、内存增长、包体积回退或帧预算相关问题,且瓶颈尚未定位
- 以跟踪记录、Lighthouse/CWV 报告、火焰图、查询计划、负载测试差异、性能分析器截图、基准测试记录或利益相关方仪表板形式提交的性能资料包
- 跨领域性能需求,涉及 CLI/开发工作流、Web/全栈、产品/运维、营销/内容性能或游戏相关路由,且尚不清楚下一步由谁负责
- 需要一份范围明确的调优简报,而非泛泛的性能建议清单
何时不使用此技能
- 主要任务是部署仪表板、告警、指标、跟踪记录或日志管道 → 使用
monitoring-observability - 主要任务是复现正确性错误、定位回退或弄清行为异常的原因 → 使用
debugging - 主要任务是在没有性能证据的情况下安全地进行结构清理、拆分或制定代码转换计划 → 使用
code-refactoring - 主要任务是选择组织级测试层、合并/发布门禁或基准测试政策 → 使用
testing-strategies - 瓶颈明确位于 Unity/Unreal/Godot 捕获数据中,且主要工作是针对特定引擎进行解读 → 使用
game-performance-profiler - 瓶颈已定位,下一步是针对特定技术栈的实现细节;先整理调优简报,再转交给实现类技能
指南
步骤 1:梳理问题
在提出修复方案前,先用尽可能简短且有用的表述说明问题。
记录:
- 范围:CLI/开发 | 前端/页面加载 | API/服务 | 数据库 | 异步/容量 | 报告/仪表板 | 运行时/游戏 | 未知
- 症状:高延迟 | 低吞吐量 | 内存增长 | CPU 饱和 | 查询缓慢 | 包体积过大 | CWV 表现不佳 | 帧时间突增 | 未知
- 决策目标:p50/p95/p99 延迟、吞吐量、包体积、内存上限、帧预算、CWV 指标或基准测试时长
- 环境:本地 | CI 基准测试 | 预发布 | 生产环境 | 目标设备/硬件 | 混合/未知
- 问题是回退、长期存在的热点,还是描述模糊的问题
快速梳理:
Surface: API + database
Symptom: p95 latency jumped from 180ms to 850ms on order search
Decision target: restore p95 < 250ms
Environment: production-like staging
Regression: yes, after filter expansion
步骤 2:从接收材料包开始
使用 references/intake-packets-and-escalations.md。
选择用户目前实际拥有的材料包:
- 浏览器跟踪记录 / DevTools 录制
- Lighthouse、WebPageTest 或 CWV 报告
- APM 跟踪记录、火焰图、分析器输出或基准测试差异
EXPLAIN/ 查询计划 / 慢查询材料- 分析器截图 / 统计信息叠加层 / 引擎捕获数据
- 电子表格、仪表板、报告摘要,或目前还没有可用材料
将此步骤的输出写为:
## Intake Packet
- Current artifact:
- Why it is enough (or not enough):
- Missing context to collect next:
规则:如果现有材料已经能缩小下一步决策的范围,就不要强迫用户采用理想的测量流程。
步骤 3:选择一种主要调优模式
从 references/tuning-modes.md 中选择一种主要模式。
主要模式:
interaction-and-renderingpage-load-and-bundleapi-latency-and-hot-pathsdatabase-plan-and-data-accessthroughput-and-capacitymemory-and-allocationruntime-frame-budgetunknown-needs-better-measurement
规则:一种主要模式,可选一种次要模式。 不要在一个回答中混合所有可能的优化方向。
步骤 4:提出修复建议前,先指出瓶颈
将证据归纳为一条瓶颈陈述。
好的瓶颈陈述示例:
- “数据库工作已经完成,但端点受限于 JSON 序列化的 CPU 开销。”
- “搜索查询计划执行了范围很广的排序和筛选,因为复合索引与查询条件不匹配。”
- “交互延迟主要由一个长任务以及结果面板中的布局抖动造成。”
- “在目标硬件上,帧率峰值与资源流式加载突增同时出现。”
- “CWV 报告显示,LCP 主要受图像负载和阻塞渲染的脚本开销影响,而非服务器延迟。”
避免“整体性能不好”之类的模糊说法。
步骤 5:推荐一到两项高影响改动
优先选择能直接解决所述瓶颈、且最小而可靠的改动。
按模式划分的候选改动:
interaction-and-rendering:缩小重新渲染范围,延迟非关键工作,避免布局抖动,对大型列表进行虚拟化,减少主线程上的同步工作page-load-and-bundle:拆分路由 / 模块,减少 JS,优化资源交付,压缩 / 调整图像尺寸,削减第三方开销,积极使用缓存api-latency-and-hot-paths:移除阻塞工作,缓存开销大的响应,降低序列化开销,并行执行安全的下游调用,预先计算开销大的转换database-plan-and-data-access:调整查询结构,添加 / 调整索引,移除 N+1 访问,更早应用筛选,改变分页策略,缩减行宽throughput-and-capacity:调整并发限制、队列结构、工作线程池大小、连接池大小、批次大小或缓存命中路径memory-and-allocation:减少内存分配与回收,限制缓存,在适当情况下复用缓冲区 / 对象,采用流式处理而非缓冲,缩小负载runtime-frame-budget:减少每帧工作量,分散开销大的任务,降低绘制 / 过度绘制压力,延迟流式加载突发任务,简化开销大的效果unknown-needs-better-measurement:不要猜测;询问用户能以最低成本区分可能原因的材料
经验法则:除非下一步是收集更多证据,否则最多推荐两项候选改动。
步骤 6:说明权衡并转交其他任务
每条调优建议都应说明可能带来的负面影响。
示例:
- 缓存可能降低延迟,但会增加数据陈旧或内存压力
- 批处理可能提高吞吐量,但会加剧尾延迟
- 分页或索引变更可能加快某个查询,但会让写入更复杂
- 延迟加载或拆分可能加快初始加载,但会增加后续交互延迟
- 图像压缩或简化资源可能降低质量,或需要内容/设计团队批准
需要时转交实现工作:
- 组件/状态架构清理 →
react-best-practices、state-management或design-system - 架构/索引/数据模型重设计 →
database-schema-design - 遥测部署或持续告警 →
monitoring-observability - 基准测试门禁策略 →
testing-strategies - 特定引擎的分析器结果解读 →
game-performance-profiler - 优先保证正确性的复现或环境漂移 →
debugging
步骤 7:验证优化前后的影响
请使用 references/measurement-checklist.md。
验证材料应包括:
- 基线指标和环境
- 已变更的变量
- 在可比条件下测得的优化后指标
- 主要瓶颈是否转移或消失
- 残余风险/后续测量
良好的验证简报:
Baseline: p95 search latency 850ms on staging replay dataset
Change: added `(team_id, status, created_at)` index and removed N+1 author lookup
After: p95 230ms, DB time down 68%, CPU flat
Residual risk: cache-miss path still spikes at 400ms for very wide date ranges
Next if needed: cap date window or async export path
输出格式
## Performance Brief
- Surface:
- Symptom:
- Decision target:
- Primary mode:
- Current artifact:
## Bottleneck Hypothesis
- Primary bottleneck:
- Confidence:
- Why:
## Highest-Leverage Changes
1. ...
2. ...
## Tradeoffs / Risks
- ...
## Verification Plan
- Baseline:
- After:
- Guardrail:
## Route-outs
- ...
示例
示例 1:API + 数据库延迟回归
输入:“添加更多筛选条件后,我们的订单搜索端点突然变慢了。我们有 EXPLAIN ANALYZE 输出和慢查询日志。”
**预期形式:**归类为 database-plan-and-data-access,并将 API 作为次要模式;使用现有材料,而不是先索要通用遥测数据;找出最耗时的查询或序列化层;提出一两项有针对性的改动,然后定义优化前后的验证方法。
示例 2:营销/内容性能报告
输入:“我们的落地页 CWV 报告显示 LCP 和 INP 表现不佳。我们有 Lighthouse 和现场数据,但还没有分析器跟踪记录。”
**预期形式:**归类为 page-load-and-bundle,将报告视为完整的初始材料;区分可能的资源/渲染阻塞原因与遥测数据缺口;建议一两项范围明确的后续行动,并说明何时值得收集更多跟踪记录。
示例 3:转交至可观测性配置
输入:“我们需要仪表板、跟踪记录和告警,以便在用户投诉之前发现响应缓慢的端点。”
**预期形式:**转交至 monitoring-observability,而不是假装主要任务已经是性能优化。
示例 4:转交至游戏引擎分析器技能
输入:“Unreal 在 Steam Deck 上出现卡顿,我有一份 Insights 捕获记录。你能帮我解读吗?”
**预期形式:**承认更广泛的性能背景,但将特定引擎的捕获记录解读工作转交至 game-performance-profiler。
最佳实践
- 从用户已有的材料入手;将其整理为调优简报,而不是丢弃。
- 先测量,再调优。
- 提出改动前,先指出一个主要瓶颈。
- 控制建议范围:一两项高收益改动胜过一长串清单。
- 验证影响时,确保环境可比。
- 明确说明权衡,尤其是缓存、一致性、内存和内容质量方面的成本。
- 将遥测配置、调试、重构和特定引擎分析器解读转交给相关技能,而不是包揽一切。