# 性能优化

## 规则（Rules）

# 性能优化规范

## 适用对象和范围

本规范适用于所有系统性能优化场景，包括代码优化、资源优化和架构优化。

---

## 1. 先分析后优化

**规则**：必须先通过性能分析工具识别瓶颈，再制定优化方案。

- ✅ 正确：先用工具分析CPU/内存/I/O瓶颈，再有针对性地优化
- ❌ 错误：凭感觉猜测瓶颈位置

**违反后果**：盲目优化可能浪费时间在非瓶颈环节，实际效果甚微。

---

## 2. 测试验证规范

**规则**：优化方案必须经过测试验证才能上线。

- ✅ 正确：在测试环境验证优化效果，对比优化前后的性能指标
- ❌ 错误：未经测试直接在生产环境执行优化

**违反后果**：未经测试的优化可能引入新问题，导致系统不稳定。

---

## 3. 回滚准备规范

**规则**：优化方案必须准备回滚方案，优化效果不达预期时立即回滚。

**违反后果**：无回滚方案导致优化失败后无法快速恢复。

## 方法（Methods）

# 性能优化方法

## 前置条件

- [ ] 已确认系统存在性能问题（响应慢、资源占用高等）
- [ ] 已获取系统架构和代码信息

---

## 流程概览

```
分析性能瓶颈 → 制定优化方案 → 执行优化 → 验证效果
```

---

## 详细步骤

### 步骤1：分析性能瓶颈

使用性能分析工具识别系统瓶颈：
- CPU瓶颈：使用 `top`、`perf` 等工具
- 内存瓶颈：使用 `free`、`valgrind` 等工具
- I/O瓶颈：使用 `iostat`、`iotop` 等工具
- 网络瓶颈：使用 `netstat`、`tcpdump` 等工具

### 步骤2：制定优化方案

针对识别的瓶颈制定优化策略：
- 代码优化：算法优化、减少循环、缓存结果
- 资源优化：压缩资源、懒加载、CDN加速
- 架构优化：引入缓存层、读写分离、水平扩展

### 步骤3：执行优化

实施优化方案，调整代码、配置或架构。

### 步骤4：验证效果

测试优化后的系统性能，对比优化前后的指标。

---

## 决策分支

- **优化效果不达预期** → 回滚优化，重新分析瓶颈
- **优化引入新问题** → 立即回滚，排查问题原因

---

## 产出物说明

1. 性能优化报告（含优化前后对比数据）
2. 优化后的系统配置或代码

## 技巧（Tips）

# 性能优化技巧

## 1. 使用缓存减少重复计算

**适用场景**：相同数据被频繁访问时。

**具体做法**：引入内存缓存（Redis/Memcached）或本地缓存。

**示例**：
```javascript
// 本地缓存示例
const cache = new Map();

async function getUserData(userId) {
  if (cache.has(userId)) {
    return cache.get(userId);
  }
  const data = await db.query('SELECT * FROM users WHERE id = ?', [userId]);
  cache.set(userId, data);
  return data;
}
```

**注意事项**：缓存需要设置过期时间，避免数据不一致。

---

## 2. 使用数据库索引优化查询

**适用场景**：数据库查询响应慢时。

**具体做法**：为查询条件字段添加索引，使用EXPLAIN分析查询计划。

**注意事项**：索引不是越多越好，写操作频繁的表要控制索引数量。

---

## 3. 常见问题速查

| 问题 | 原因 | 解决方案 |
|------|------|---------|
| CPU使用率100% | 死循环或低效算法 | 检查代码逻辑，优化算法 |
| 内存持续增长 | 内存泄漏 | 检查未释放的对象和事件监听 |
| 数据库查询慢 | 缺少索引 | 添加索引，优化SQL |
| 页面加载慢 | 资源过大 | 压缩资源，使用懒加载 |
