name: performance description: 全面的性能专家,涵盖分析、优化、负载测试和框架特定性能。适用于识别瓶颈、优化代码、进行负载测试、分析核心网页指标、修复内存泄漏或改进所有层级(应用程序、数据库、前端)的应用程序性能。包括React特定的优化模式。 author: Joseph OBrien status: unpublished updated: ‘2025-12-23’ version: 1.0.1 tag: skill type: skill
性能
此技能提供全面的性能能力,包括性能分析、优化、负载测试、压力测试、容量规划和框架特定的性能模式。
何时使用此技能
- 识别性能瓶颈时
- 调查内存泄漏或高内存使用率时
- 优化缓慢的数据库查询时
- 分析前端性能(核心网页指标、包大小)时
- 设置性能监控时
- 部署前进行性能审计时
- 创建负载测试场景时
- 分析压力下的性能时
- 识别负载下的系统瓶颈时
- 规划容量时
- 设置性能基准时
- 优化React渲染性能时
- 减少包大小时
- 改进核心网页指标(LCP、FID、CLS)时
- 修复React应用中的内存泄漏时
- 实现高级React模式时
此技能的功能
- 性能分析:分析CPU、内存和网络性能
- 瓶颈识别:精确定位特定性能问题
- 内存分析:检测内存泄漏和高内存使用率
- 数据库优化:识别慢查询和优化机会
- 前端分析:分析包大小、渲染性能、核心网页指标
- 负载测试:创建和执行负载测试场景
- 压力测试:识别崩溃点和极限
- 容量规划:分析可扩展性和容量
- React优化:优化React渲染、包大小和核心网页指标
- 监控设置:创建性能监控和告警
如何使用
分析性能
分析此应用程序的性能并识别瓶颈
分析内存使用情况并查找泄漏
创建负载测试
为此API创建负载测试场景
测试1000个并发用户下的性能
优化React应用
优化此React应用以获得更好的性能
分析包大小并减小它
分析领域
应用程序性能
要跟踪的指标:
- 响应时间和延迟
- 吞吐量(每秒请求数)
- 错误率
- CPU利用率
- 内存使用模式
常见问题:
- 缓慢的API端点
- 高CPU使用率
- 内存泄漏
- 低效算法
- 阻塞操作
数据库性能
分析重点:
- 慢查询识别
- 缺失索引
- N+1查询问题
- 连接池耗尽
- 锁争用
工具:
- 查询执行计划(EXPLAIN ANALYZE)
- 慢查询日志
- 数据库监控工具
- 连接池指标
前端性能
核心网页指标:
- 最大内容绘制(LCP)< 2.5秒
- 首次输入延迟(FID)< 100毫秒
- 累积布局偏移(CLS)< 0.1
包分析:
- 包大小优化
- 代码分割机会
- 未使用代码移除
- 资源优化
React性能
渲染优化:
- 使用React.memo进行组件记忆化
- 使用useMemo进行昂贵计算
- 使用useCallback进行函数记忆化
- 长列表虚拟化
- 代码分割和懒加载
包优化:
- 按路由进行代码分割
- 组件懒加载
- 摇树优化移除未使用代码
- 动态导入
- 包分析
性能测试
负载测试
目的:测试系统在预期负载下的表现 指标:响应时间、吞吐量、错误率 工具:k6、Artillery、JMeter、Locust
示例(k6):
import http from 'k6/http';
import { check } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 }, // 逐步增加
{ duration: '5m', target: 100 }, // 保持在100
{ duration: '2m', target: 200 }, // 逐步增加到200
{ duration: '5m', target: 200 }, // 保持在200
{ duration: '2m', target: 0 }, // 逐步减少
],
};
export default function() {
const res = http.get('https://api.example.com/users');
check(res, {
'状态码是200': (r) => r.status === 200,
'响应时间 < 500ms': (r) => r.timings.duration < 500,
});
}
压力测试
目的:寻找崩溃点 指标:最大容量、故障点 方法:逐步增加负载直至故障
容量规划
目的:确定资源需求 指标:资源利用率、扩展需求 分析:当前容量与未来需求对比
分析流程
1. 建立基线
测量当前性能:
- 响应时间百分位数(p50、p90、p95、p99)
- 吞吐量指标
- 错误率
- 资源利用率(CPU、内存、网络)
设定目标:
- 定义可接受的性能阈值
- 设定SLA目标
- 识别关键路径
2. 识别瓶颈
分析技术:
- CPU分析以找到热点函数
- 内存分析以找到泄漏
- 网络分析用于API调用
- 数据库查询分析
瓶颈模式:
- 单个慢操作(算法复杂度)
- 许多小操作(N+1查询)
- 资源争用(锁、连接池)
- 内存泄漏(逐渐增长)
3. 分析根本原因
调查步骤:
- 识别慢操作
- 测量其性能
- 分析其慢的原因
- 检查优化机会
- 验证修复是否改善了性能
4. 提供优化建议
建议应包括:
- 具体的代码更改
- 优化前后的性能指标
- 实施步骤
- 预期影响
- 风险评估
示例
示例1:API性能分析
输入:API端点 /api/users 缓慢
输出:
## 性能分析:/api/users
### 当前性能
- **平均响应时间**:2.3秒
- **P95响应时间**:4.1秒
- **吞吐量**:45 请求/秒
- **错误率**:2%
### 已识别的瓶颈
**问题**:用户数据获取中的N+1查询问题
- **位置**:`src/routes/users.js:34`
- **模式**:一个查询获取用户,然后N个查询获取每个用户的帖子
### 根本原因
```javascript
// 当前实现
const users = await db.users.findAll();
for (const user of users) {
user.posts = await db.posts.findByUserId(user.id); // N+1 查询
}
优化
// 使用预加载优化
const users = await db.users.findAll({
include: [{ model: Post, as: 'posts' }] // 使用JOIN的单次查询
});
预期影响
- 响应时间:2.3秒 → 0.3秒(87% 改进)
- 数据库查询:101 → 1(99% 减少)
- 吞吐量:45 → 200+ 请求/秒
### 示例2:React组件优化
**输入**:优化昂贵的组件
**输出**:
```markdown
## React性能:组件优化
### 问题
组件在每次父组件更新时都会重新渲染,即使props没有改变。
### 优化
```javascript
// 之前:不必要地重新渲染
function ExpensiveComponent({ data, config }) {
const processed = data
.filter(item => item.active)
.map(item => processComplex(item, config));
return <Chart data={processed} />;
}
// 之后:记忆化以防止不必要的重新渲染
const ExpensiveComponent = React.memo(({ data, config }) => {
const processed = useMemo(() => {
return data
.filter(item => item.active)
.map(item => processComplex(item, config));
}, [data, config]);
return <Chart data={processed} />;
});
影响
- 重新渲染减少:100% → 5%
- 性能提升:80% 更快
## 参考文件
对于框架特定的性能模式和详细指导,根据需要加载参考文件:
- **`references/framework_patterns.md`** - Node.js、React、数据库、API、前端和监控策略的性能模式(来自性能分析)
- **`references/react_patterns.md`** - React特定的性能优化模式、记忆化策略、包优化和核心网页指标改进
- **`references/load_testing.md`** - 负载测试和压力测试模式、工具、场景和容量规划策略
- **`references/PERFORMANCE_ANALYSIS.template.md`** - 性能分析报告模板,包含负载概况、瓶颈和建议
当为特定框架分析性能或进行负载测试时,加载相应的参考文件。
## 最佳实践
### 性能分析方法
1. **先测量**:始终建立基线指标
2. **优化前先分析**:识别实际的瓶颈
3. **逐步优化**:一次只做一个更改
4. **验证改进**:每次优化后测量
5. **持续监控**:设置持续的性能监控
### 常见优化
**应用程序:**
- 优化算法(降低复杂度)
- 添加缓存层
- 使用连接池
- 实现请求批处理
- 添加速率限制
**数据库:**
- 添加适当的索引
- 优化查询(避免N+1)
- 使用查询结果缓存
- 实现读副本
- 优化连接池
**前端:**
- 代码分割和懒加载
- 图片优化
- 包大小减少
- 最小化重新渲染
- 优化资源加载
**React:**
- 优化前先测量
- 策略性地记忆化(不要过度记忆化)
- 按路由和功能进行代码分割
- 按需懒加载组件
- 监控性能指标
### 监控设置
**关键指标:**
- 响应时间百分位数
- 错误率
- 吞吐量
- 资源利用率
- 自定义业务指标
**告警:**
- 性能下降时告警
- 错误率激增时告警
- 资源耗尽时告警
- SLA违规时告警
## 相关用例
- 性能审计
- 优化项目
- 容量规划
- 性能回归检测
- 生产环境性能监控
- 负载测试分析
- React应用优化
- 包大小减少
- 核心网页指标改进
- 内存泄漏修复
- 渲染性能优化