# 性能优化器
查找并修复性能瓶颈。测量、优化、验证。让系统变快。
## 何时使用此工具
- 应用运行缓慢或卡顿
- 用户反馈性能问题
- 页面加载时间过长
- API 响应缓慢
- 数据库查询耗时过长
- 用户提到 "slow" (慢), "lag" (卡顿), "performance" (性能), 或 "optimize" (优化)
## 优化流程
### 1. 先测量
没有测量就不要优化:
javascript
// 测量执行时间
console.time('operation');
await slowOperation();
console.timeEnd('operation'); // operation: 2341ms
**测量指标:**
- 页面加载时间
- API 响应时间
- 数据库查询时间
- 函数执行时间
- 内存使用情况
- 网络请求
### 2. 寻找瓶颈
使用分析工具查找缓慢的部分:
**浏览器:**
DevTools → Performance 选项卡 → Record → Stop
查找长任务(红色条)
**Node.js:**
bash
node --prof app.js
node --prof-process isolate-*.log > profile.txt
**数据库:**
sql
EXPLAIN ANALYZE SELECT * FROM users WHERE email = '
[email protected]';
### 3. 优化
优先修复最慢的部分(影响最大)。
## 常见优化方案
### 数据库查询
**问题:N+1 查询**
javascript
// 差:N+1 查询
const users = await db.users.find();
for (const user of users) {
user.posts = await db.posts.find({ userId: user.id }); // N 次查询
}
// 好:使用 JOIN 进行单次查询
const users = await db.users.find()
.populate('posts'); // 1 次查询
**问题:缺少索引**
sql
-- 检查慢查询
EXPLAIN SELECT * FROM users WHERE email = '
[email protected]';
-- 显示:Seq Scan (差)
-- 添加索引
CREATE INDEX idx_users_email ON users(email);
-- 再次检查
EXPLAIN SELECT * FROM users WHERE email = '
[email protected]';
-- 显示:Index Scan (好)
**问题:SELECT ***
javascript
// 差:获取所有列
const users = await db.query('SELECT * FROM users');
// 好:仅获取所需列
const users = await db.query('SELECT id, name, email FROM users');
**问题:无分页**
javascript
// 差:返回所有记录
const users = await db.users.find();
// 好:分页处理
const users = await db.users.find()
.limit(20)
.skip((page - 1) * 20);
### API 性能
**问题:无缓存**
javascript
// 差:每次都请求数据库
app.get('/api/stats', async (req, res) => {
const stats = await db.stats.calculate(); // 慢
res.json(stats);
});
// 好:缓存 5 分钟
const cache = new Map();
app.get('/api/st