关于 arch-performance-optimization
用于分析和处理数据库、API、网络及前端性能瓶颈的编码技能。它引导开发者先测量基线,再针对性优化并验证结果。
主要功能
- 01按层识别性能瓶颈
- 02记录性能基线指标
- 03优化数据库、API 和前端
- 04对照基线验证效果
- 05检查后台任务与监控
适用场景
- 01排查 API 响应缓慢
- 02降低数据库查询延迟
- 03处理前端渲染或构建包问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ duc01226/ easyplatform --skill arch-performance-optimization安装后在 Claude Code 中输入/arch-performance-optimization确认已加载。
详细介绍
Codex 兼容性说明:
- 在 Codex 中使用
$skill-name调用仓库技能;此镜像副本会改写旧版 Claude/skill-name引用。- 任务跟踪要求:在执行任何工作流或技能步骤之前,先为所有步骤创建/更新任务跟踪,并随着进度变化保持同步。
- 用户问题提示表示要在 Codex 中直接询问用户。
- 出现 Claude 专属的模式切换指令时,请忽略。
- 严格执行约定:用户明确调用某项技能时,按原样执行该技能协议。
- 子 Agent 授权:用户调用或 AI 检测到某项技能,且其协议要求使用子 Agent 时,该技能的激活即授权为该任务使用所需的
spawn_agent子 Agent。- 除非用户事先明确批准偏离,否则不得跳过、重排或合并协议步骤。
- 对于工作流技能,明确执行每个列出的子技能步骤,并逐步报告证据。
- 如果在此环境中无法执行某个必需步骤/工具,请停止并在调整方案前询问用户。
Codex 项目参考资料加载(无钩子)
Codex 不会收到基于 Claude 钩子的文档注入。 进行编码、规划、调试、测试或审查时,请使用以下路由显式打开项目文档。
始终阅读:
docs/project-config.json(项目专属路径、命令、模块以及工作流/测试设置)docs/project-reference/docs-index-reference.md(指向完整docs/project-reference/*目录)docs/project-reference/lessons.md(始终适用的防护措施和反模式)
按情况阅读文档:
- 后端/CQRS/API/领域/实体变更:
backend-patterns-reference.md、domain-entities-reference.md、project-structure-reference.md - 前端/UI/样式/设计系统:
frontend-patterns-reference.md、scss-styling-guide.md、design-system/README.md - 规范/测试用例规划或 TC 映射:
feature-docs-reference.md - 集成测试的实现/审查:
integration-test-reference.md - E2E 测试的实现/审查:
e2e-test-reference.md - 代码审查/审计工作:
code-review-rules.md,以及根据变更文件选择上述领域文档
不要不加区分地阅读所有文档。从 docs-index-reference.md 开始,然后仅打开与任务相关的文件。
快速概览
目标: 分析并解决数据库、API、网络和前端各层的性能瓶颈。
工作流:
- 识别瓶颈 — 判断问题属于数据库、API、网络还是前端
- 测量基线 — 在变更前收集指标(响应时间、查询时间、包大小)
- 优化 — 应用针对特定层的修复(索引、缓存、延迟加载、OnPush)
- 验证 — 再次测量并确认性能有所改善且没有回归
关键规则:
- 生产环境中只查询所需列,并限制每个结果集的大小(分页/上限);切勿使用
SELECT *或不设上限的查询——原因:面对真实数据量时,无限制读取会导致内存占用和延迟激增 - 始终使用异步 I/O;切勿用
.Result阻塞线程 - 使用预加载或批量获取来消除 N+1 查询模式
- 后台任务使用有界并行(
ParallelAsync配合maxConcurrent)
保持审慎。运用批判性思维和顺序思维。每项主张都需要可追溯的证据和置信度百分比(想法应超过 80%)。
性能优化工作流
何时使用此技能
- API 响应时间缓慢
- 数据库查询优化
- 前端渲染问题
- 内存使用方面的顾虑
- 可扩展性规划
准备检查清单
- 确认性能瓶颈
- 收集基线指标
- 确定可接受的阈值
- 规划测量方法
性能分析框架
步骤 1:识别瓶颈类型
Performance Issue
├── Database (slow queries, N+1)
├── API (serialization, processing)
├── Network (payload size, latency)
└── Frontend (rendering, bundle size)
步骤 2:测量基线
# API response time
curl -w "@curl-format.txt" -o /dev/null -s "http://api/endpoint"
# Database query time (SQL Server)
SET STATISTICS TIME ON;
SELECT * FROM Table WHERE ...;
# Frontend bundle analysis
npm run build -- --stats-json
npx webpack-bundle-analyzer stats.json
数据库优化
⚠️ 务必阅读: CLAUDE.md,了解 N+1 检测、预加载、投影、分页和并行查询模式。高级索引和查询优化请参阅 database-optimization 技能。
索引建议
-- Frequently filtered columns
CREATE INDEX IX_Employee_CompanyId ON Employees(CompanyId);
CREATE INDEX IX_Employee_Status ON Employees(Status);
-- Composite index for common queries
CREATE INDEX IX_Employee_Company_Status
ON Employees(CompanyId, Status)
INCLUDE (FullName, Email);
-- Full-text search index
CREATE FULLTEXT INDEX ON Employees(FullName, Email);
API 优化
⚠️ 务必阅读: CLAUDE.md,了解并行元组查询和响应 DTO 模式。
缓存
// Static data caching
private static readonly ConcurrentDictionary<string, LookupData> _cache = new();
public async Task<LookupData> GetLookupAsync(string key)
{
if (_cache.TryGetValue(key, out var cached))
return cached;
var data = await LoadFromDbAsync(key);
_cache.TryAdd(key, data);
return data;
}
前端优化
包体积
// :x: Import entire library
import _ from 'lodash';
// :white_check_mark: Import specific functions
import { debounce } from 'lodash-es/debounce';
延迟加载
// :white_check_mark: Lazy load routes
const routes: Routes = [
{
path: 'feature',
loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule)
}
];
变更检测
// :white_check_mark: OnPush for performance
@Component({
changeDetection: ChangeDetectionStrategy.OnPush
})
// :white_check_mark: Track-by for lists
trackByItem = this.ngForTrackByItemProp<Item>('id');
// Template
@for (item of items; track trackByItem)
虚拟滚动
// For large lists
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
<cdk-virtual-scroll-viewport itemSize="50">
@for (item of items; track item.id) {
<div class="item">{{ item.name }}</div>
}
</cdk-virtual-scroll-viewport>
后台任务优化
⚠️ 务必阅读: CLAUDE.md,了解有界并行(使用 ParallelAsync 和 maxConcurrent)以及批处理(使用 UpdateManyAsync)模式。
性能监控
记录慢操作
var sw = Stopwatch.StartNew();
var result = await ExecuteOperation();
sw.Stop();
if (sw.ElapsedMilliseconds > 1000)
Logger.LogWarning("Slow operation: {Ms}ms", sw.ElapsedMilliseconds);
数据库查询日志
// In DbContext configuration
optionsBuilder.LogTo(
Console.WriteLine,
new[] { DbLoggerCategory.Database.Command.Name },
LogLevel.Information);
性能检查清单
数据库
- 在筛选列上建立索引
- 预加载关联数据
- 对部分数据使用投影
- 在数据库层进行分页
- 不存在 N+1 查询
API
- 尽可能并行执行操作
- 使用响应 DTO(而非实体)
- 对静态数据进行缓存
- 对列表进行分页
前端
- 对路由进行延迟加载
- 使用 OnPush 变更检测
- 对列表使用 track-by
- 对大型列表使用虚拟滚动
- 对导入进行摇树优化
后台任务
- 有界并行
- 批量操作
- 分页处理
- 合理安排调度
要避免的反模式
:x: 在生产环境中使用 SELECT *
var all = await context.Table.ToListAsync();
:x: 同步 I/O
var result = asyncOperation.Result; // Blocks thread
:x: 无界结果集
await repo.GetAllAsync(); // Could be millions
:x: 在循环中重复调用数据库
foreach (var id in ids)
await repo.GetByIdAsync(id); // N queries
验证检查清单
- 已记录基准指标
- 已识别并解决瓶颈
- 已根据基准测量变更效果
- 未引入新的性能问题
- 已设置监控
相关内容
arch-security-reviewdatabase-optimization
[IMPORTANT] 开始前请使用任务跟踪将所有工作拆分为小任务——包括为每个读取的文件创建任务。这样可以避免因文件过长而丢失上下文。对于简单任务,AI 必须询问用户是否跳过。
docs/project-reference/domain-entities-reference.md— 领域实体目录、关系、跨服务同步(任务涉及业务实体/模型时阅读)(相关时直接阅读;不要依赖钩子注入的对话文本)
防止 AI 犯错 — 每项任务都要避免以下失败模式:
删除前检查下游引用。 删除组件会导致文档和代码连锁过时。移除前,先梳理所有引用该组件的文件。 根据实际代码核实 AI 生成的内容。 AI 会幻觉出 API、类名和方法签名。记录或引用前,务必通过 grep 确认它们确实存在。 编辑后追踪完整依赖链。 更改定义时,可能会遗漏由此派生的下游变量和使用方。务必追踪完整链条。 核实正确性时追踪所有代码路径。 确认代码存在不等于确认它会执行。务必追踪提前退出、错误分支和条件跳过,而不仅仅是正常路径。 调试时,修复前先问「谁该负责?」 追踪 bug 是在调用方(数据错误)还是被调用方(处理错误)。在负有责任的层修复,绝不要只修补症状出现的位置。 假设现有值是有意设置的——更改前先问为什么。 更改任何常量、限制、标志或模式前:阅读注释、检查 git blame,并查看周边代码。 核实所有受影响的输出,而不只是第一个。 涉及多个技术栈的更改,必须核实每一项输出。一次检查通过不代表所有检查都通过。 整体优先的调试方式——避免被最近关注点误导。 调查任何故障时,先列出所有前置条件(配置、环境变量、数据库名称、端点、DI 注册、数据前置条件),再逐项根据证据核实,然后才能形成任何代码层面的假设。 精准修改——执行差异测试。 修复 bug 时,每一行更改都必须能直接追溯到该 bug。不要顺手调整相邻代码的样式或加以改进。增强任务:实现改进,并明确说明。 编码前指出歧义——不要默默做选择。 如果请求有多种解释,应逐一说明并估算工作量,然后询问。绝不要擅自假设要处理所有记录、采用基于文件的方案或选择更复杂的路径。
批判性思维 — 运用批判性思维和顺序思维。每项主张都需要可追溯的证据,置信度必须高于 80% 才能采取行动。 反幻觉: 绝不要把猜测说成事实——每项主张都要引用来源,坦诚承认不确定性,自查输出中的错误,独立交叉核对,并对自己的判断保持怀疑——没有证据的确定性是所有幻觉的根源。
基于证据的推理 — 禁止推测。每项主张都必须有证据。
- 每项主张都要引用
file:line、grep 结果或框架文档- 声明置信度:>80% 可直接行动,60-80% 先核实,<60% 不要提出建议
- 架构更改必须进行跨服务验证
- 「证据不足」是有效且符合预期的输出
以下条件满足前不得继续:
- [ ]证据文件路径(file:line)- [ ]已执行 grep 搜索- [ ]已找到 3 个以上相似模式- [ ]已说明置信度未经证明禁止使用: “显然”“我认为”“应该是”“可能是”“这是因为” 如果未完成 → 输出:
"证据不足。已核实:[...。]未核实:[...。]"
- 必须注意: 每项主张都必须引用
file:line证据。置信度 >80% 才能采取行动,<60% = 不要提出建议。
必须注意: 运用批判性思维——每项主张都需要可追溯的证据,置信度必须高于 80% 才能采取行动。反幻觉:绝不要把猜测说成事实。
必须注意: 遵循防止 AI 犯错的原则——整体优先地调试,在负有责任的层修复,编码前指出歧义,并在上下文压缩后重新阅读文件。
收尾提醒
- 强制 重要 必须 注意 开始前,使用任务跟踪将工作拆分为小型待办任务
- 强制 重要 必须 注意 编写新代码前,在代码库中搜索至少 3 种相似模式
- 强制 重要 必须 注意 每项断言都要引用
file:line证据(置信度 >80% 才能采取行动) - 强制 重要 必须 注意 添加一项最终审查待办任务,以验证工作质量 强制 重要 必须 注意 开始前阅读以下文件:
[任务规划] 行动前,分析任务范围,并使用任务跟踪系统地将任务拆分为小型待办任务和子任务。
无钩子提示词协议镜像(自动同步)
来源:.claude/hooks/lib/prompt-injections.cjs + .claude/.ck.json
[WORKFLOW-EXECUTION-PROTOCOL] [BLOCKING] 工作流执行协议 — 强制 重要 必须 关键。无论任何原因,都不得跳过。
通用可移植性边界: 可复用技能和协议文本应保持项目中立;项目专属约定应从 docs/project-config.json 和 docs/project-reference/ 中查明。应用共享 AI-SDD,参见 shared/sdd-artifact-contract.md。阅读 docs/project-config.json 和 docs/project-reference/docs-index-reference.md,然后打开其中列出的项目参考文档。只要具备此共享上下文和本地文档,任何受支持的 AI 工具都可以执行。
- 检测: 将提示词与工作流目录匹配
- 分析: 找出最匹配的工作流,并评估自定义步骤组合是否更合适
- 提问(必需格式): 使用以下结构直接向用户提问;除非用户明确调用了某个工作流/技能,且本地协议将明确调用视为确认:
- 问题:“你想启用哪个工作流?”
- 选项 1:“启用 [最佳匹配工作流](推荐)”
- 选项 2:“启用自定义工作流:[步骤 1 → 步骤 2 → ...]”(附上一句话说明理由)
- 启用(确认后): 标准工作流调用
$workflow-start <workflowId>;手动依次执行自定义步骤 - 创建任务: 使用任务跟踪覆盖工作流的所有步骤
- 执行: 按顺序完成每个步骤 [关键思维模式] 运用批判性思维和顺序思维。每项断言都需要可追溯的证据;置信度 >80% 才能采取行动。 反幻觉原则: 绝不将猜测当作事实;每项断言都要引用来源,坦诚承认不确定性,自行检查输出中的错误,独立交叉验证,并对自身判断保持怀疑——没有证据却深信不疑,是所有幻觉的根源。 AI 注意力原则(首因—近因): 在较长提示词/协议的顶部和底部都放置最关键的 3 条规则,确保在长上下文窗口中仍能遵守指令。 目标驱动执行: 先定义成功标准,循环执行直至验证完成;只有在可观察的检查全部通过后才能停止。 测试验证意图: 测试必须保护业务规则/不变量,并在受保护的意图被破坏时失败,而不只是照搬当前行为。
[LESSON-LEARNED-REMINDER] [BLOCKING] 任务规划与持续改进 — 必须遵守。请勿跳过。
开始前将工作拆分为小任务(任务跟踪)。添加最后一项任务:“分析 AI 错误与经验教训”。
提取经验教训——只分析根本原因,不要只修复症状:
- 指明失败模式(推理或假设错误),而不是症状——“假设 API 存在,却没有阅读源代码”,而不是“使用了错误的枚举值”。
- 通用性测试:此失败模式是否适用于 ≥3 种情境或代码库?如果不适用,就再抽象一个层次。
- 将其写成普遍规则——去掉特定于项目的名称、路径和类。确保规则适用于任何代码库。
- 合并:多个错误若具有相同的失败模式,则合并为一条经验教训。
- 复发检查:“如果没有此提醒,这种情况会在未来的会话中再次发生吗?”——不会 → 跳过
$learn。 - 自动修复检查:“
$code-review/$code-simplifier/$security/$lint能否发现此问题?”——能 → 改进审查技能。 - 两项检查均通过 → 请用户运行
$learn。 [TASK-PLANNING] [MANDATORY] 执行任何工作流或技能步骤之前,先为所有计划步骤创建或更新任务跟踪,然后在每个步骤开始和完成时保持任务跟踪同步。