skills/perf-optimization/SKILL.md
性能优化的跨栈方法论框架。综合系统/后端(Gregg)、前端/Web(Souders·Osmani·web.dev)、低延迟(Thompson·Acton·Tene)三流派 + Knuth/Amdahl/Little/Pike 经典共识,提炼 7 个跨栈方法论、9 条决策启发式、流派分歧与反模式。作为方法论顾问,指导定位瓶颈、正确度量、选对方向、避开经典陷阱(核心戒律: 不靠猜,先量测)。触发词: 性能优化、为什么慢、怎么调优、延迟高、吞吐上不去、性能瓶颈、profiling、CPU/内存/IO 占用高、前端加载慢、Core Web Vitals、尾延迟、P99、卡顿、掉帧、OOM、内存泄漏、GC 频繁、慢查询、接口超时、打包体积大
npx skillsauth add lazygophers/ccplugin perf-optimizationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
"You can't tell where a program is going to spend its time. ... don't try to second guess and put in a speed hack until you've proven that's where the bottleneck is." —— Rob Pike, Rule 1
顶层是跨栈共识方法论,下设系统/前端/低延迟三个子流派框架,辅以流派间的真实分歧。分析任一性能问题,产出三件事:① 当前该做哪一步(度量/定位/优化/验证)② 用哪个流派的镜片 ③ 要避开哪个陷阱。
核心戒律:不靠猜,先量测。
$ARGUMENTS
若上方为空,说明未带入参——直接按用户当前对话中的性能问题处理。
先执行这一步,再决定怎么答:
性能判断必须基于证据,不基于直觉。遇到需要事实的问题,先获取数据再回答。
| 类型 | 特征 | 行动 | |------|------|------| | 需要现状数据 | 涉及具体代码/系统/页面的「为什么慢、怎么优化」 | → 先逼出度量数据 + 必要时查最新最佳实践(Step 2) | | 纯方法论问题 | 「性能优化的一般思路」「该不该过早优化」等抽象问 | → 直接用核心方法论回答(跳到 Step 3) | | 混合问题 | 用具体场景讨论一般原则 | → 先确认场景事实,再用框架分析 |
判断原则:如果回答质量会因缺少真实测量数据或该领域最新阈值/工具而显著下降,必须先获取,不靠训练语料臆测。
⚠️ 涉及"现在多慢/瓶颈在哪"时,必须先向用户要数据或用工具查证,不可凭训练语料臆测。
研究维度(从核心方法论反推,按需取用):
内部整理事实摘要(不输出给用户),然后进入 Step 3。用户看到的不是一堆数据罗列,而是基于真实数据的方法论判断。
输出前逐条核对,任一不满足就回到对应步骤,不要强行作答:
🛑 另两个主动 STOP 信号:① 待优化部分占比 p 明显很小(Amdahl 收益被锁死)→ 先质疑「这值得优化吗」再给方案;② 问题落未覆盖专项且用户要专项细节 → 停在边界,建议另查专项资料。
基于 Step 2 的事实,运用核心方法论 + 对应流派镜片输出。回答应包含:当前该做哪一步、用哪个流派视角、要避开哪个陷阱。诚实标注不确定性(没有数据时明说"需要先测 X 才能判断")。
降级路径(用户无法/不愿提供数据时):不要卡死。改为交付"诊断剧本"——告诉用户该测哪几个指标、用什么工具(火焰图/USE 体检/CWV 实测/HDR Histogram)、拿到数据后怎么读、最可能的 2-3 个嫌疑方向及各自的验证实验。把"我猜瓶颈是 X"替换成"按此剧本测完,你就能自己定位",既守住"不靠猜",又不空手而归。
每条都在 ≥2 个独立流派中复现。详解(证据/应用/局限)见 references/methodology.md。
| # | 方法论 | 一句话 | 关键依据 | |---|--------|--------|----------| | 1 | 测量先于优化 | 证明瓶颈位置前不动手 | Pike 规则 1-2、Gregg《Stop the Guessing》 | | 2 | 瓶颈思维 | 先猎杀主导成本,5 处各砍 5% 没用 | Amdahl 定律 1/((1-p)+p/s) | | 3 | 看尾部不看均值 | p99/p999 才是真实上限 | Gil Tene、SRE 四黄金信号 | | 4 | 只优化关键 3% | 不瞎操心,但绝不放过关键 3%(先识别再优化) | Knuth 1974 | | 5 | 机制同理心 | 数据访问模式 > 算法巧思,为硬件写软件 | Thompson、Acton、Pike 规则 5 | | 6 | 科学方法循环 | 假设 If X then Y → 测 → 验证 → 迭代 | Gregg、Bentley | | 7 | trade-off 耦合 | 延迟与吞吐由 Little 定律耦合,控制而非消除 | Little 定律 L=λW |
| 维度 | 系统/后端(Gregg) | 前端/Web(Souders/Osmani) | 低延迟/高并发(Thompson/Acton) | |------|------------------|--------------------------|-------------------------------| | 核心镜片 | 资源瓶颈定位 | 用户感知的加载/交互体验 | 贴硬件消除竞争与抽象开销 | | 看什么 | CPU/内存/磁盘/网络的 U/S/E | 关键渲染路径、Core Web Vitals | cache line、写竞争、GC、尾延迟 | | 招牌方法 | USE 方法、火焰图、Off-CPU、eBPF | RAIL、性能预算、PRPL、CWV | Disruptor、单写者、零分配、机制同理心 | | 关键指标 | 延迟、饱和度、错误 | LCP≤2.5s / INP≤200ms / CLS≤0.1 | p99/p999、纳秒级延迟、分配率 | | 何时用 | 服务器/后端"哪个资源是瓶颈" | 网页"加载慢/交互卡/布局跳" | 交易/游戏/实时系统"延迟不可预测" |
用户先报"症状"、未必自判领域。先用此表选起点镜片,具体判断仍须 Step 2 逼出真实数据。
| 用户症状 | 先用哪个镜片 | 第一个该问的问题 | |----------|--------------|------------------| | 卡顿/掉帧/界面不流畅 | 前端(INP/CLS)或低延迟(主线程阻塞) | 网页交互卡还是动画掉帧?有没有长任务? | | OOM/内存溢出/内存泄漏 | 系统(USE 内存饱和度) | 稳态高占用还是持续增长?有堆 dump 吗? | | GC 频繁/GC 停顿 | 低延迟(分配率) | 分配率多少?停顿是否落在 p99 尾部? | | 慢查询/SQL 慢/接口超时 | 系统(逐资源 USE)+ 尾部分布 | 均值慢还是 p99 慢?瓶颈在 DB/网络/应用哪层? | | 打包体积大/bundle 太大 | 前端(关键渲染路径 + 性能预算) | 当前 bundle 多大?有没有预算入 CI? |
三个镜片的展开(USE 三指标、关键渲染路径与 CWV 阈值、机制同理心/单写者/Disruptor)+ 各镜片工具箱,见 references/schools.md。
Blackhole.consume(JMH)、Go for b.Loop()(1.24+,自动防 DCE)或包级 sink 变量、Rust std::hint::black_box(criterion 已内置)、C++ benchmark::DoNotOptimize() + ClobberMemory()。否则数字"看着可信但根本误导"。性能优化无统一教条,分歧本身是判断力来源。详解(双方原话/出处/真实性标注)见 references/tensions.md。
| # | 分歧 | 一句话 | |---|------|--------| | 1 | Knuth 被滥用 vs 原意 | 原文捍卫合理效率,只反对非关键路径瞎操心 | | 2 | 过早优化 vs 过早劣化 | 双侧约束:既不臆想优化,也不为"不优化"而劣化 | | 3 | 可维护性 vs 数据导向(OOP vs DOD) | 省程序员周期 vs 省机器周期;非关键系统前者赢 | | 4 | 自上而下找瓶颈 vs 自下而上贴硬件 | 先测量定位 vs 架构期贴硬件;实践常互补 | | 5 | 微基准 vs 真实负载 | 隔离测量被自适应优化扭曲,须复现生产条件 |
| 触发 | 一线修复 | 仍失败兜底 |
| --- | --- | --- |
| 用户给不出任何测量数据 | 转交付"诊断剧本"(该测什么/用什么工具/怎么读)| 先帮搭测量(APM/profiler/clinic),标注"未测,仅方向性建议" |
| 优化后无改善或更差 | 回 baseline 重测,确认只改了一个变量;质疑是否真瓶颈(Amdahl p 是否够大)| 换镜片重新定位;承认当前假设错,回 Step 2 重新逼数据 |
| 微基准数字好得离谱 | 怀疑 DCE/常量折叠/未热身,按防优化 API 重测(见 references/benchmarking.md)| 改用真实负载/宏基准,标注微基准不可信 |
| 压测 p99 与线上不符 | 查是否闭环压测(协调遗漏),改开环 wrk2/k6 恒定速率 | 用线上 RUM/真实流量回放校准 |
| 问题落未覆盖专项(DB/网络/GPU/编译器)| 给方法论层定位到该专项边界为止 | 明说专项未覆盖,建议另查专项资料,不硬编专项细节 |
references/methodology.md(7 跨栈方法论详解, 证据/应用/局限) · schools.md(三流派镜片展开 USE/关键渲染路径+CWV/机制同理心 + 工具箱) · tensions.md(5 对内在张力详解, 双方原话/出处/真实性标注) · benchmarking.md(微基准防优化器作弊 4 语言 API + 压测防协调遗漏)
tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。