性能分析器Skill performance-profiler

性能分析器是一款专注于识别和解决软件代码性能瓶颈的智能工具。它能自动检测N+1查询、低效循环、内存泄漏、慢速算法等常见性能问题,并提供优化建议。适用于代码审查、性能调优和系统优化场景。关键词:性能优化,代码分析,瓶颈检测,内存泄漏,算法优化,数据库查询优化,前端性能,性能分析工具。

后端开发 9 次安装 120 次浏览 更新于 3/3/2026

name: performance-profiler description: 识别性能瓶颈,包括N+1查询、低效循环、内存泄漏和慢速算法。当用户提到性能问题、代码缓慢、优化或性能分析时使用。 allowed-tools: Read, Grep, Glob

性能分析器

识别并建议修复代码中常见的性能瓶颈。

使用时机

  • 用户报告性能问题或代码缓慢
  • 优化请求
  • 代码审查以提升性能
  • 用户提及“慢”、“瓶颈”、“优化”、“内存泄漏”

使用说明

1. 识别性能反模式

N+1查询问题:

// 差:N+1次查询
users.forEach(user => {
  const posts = db.query('SELECT * FROM posts WHERE user_id = ?', user.id);
});

// 好:使用JOIN的单次查询
const usersWithPosts = db.query('SELECT * FROM users LEFT JOIN posts ON users.id = posts.user_id');

低效循环:

# 差:O(n²)嵌套循环
for item in list1:
    for other in list2:
        if item.id == other.id:
            process(item, other)

# 好:使用哈希映射实现O(n)
lookup = {other.id: other for other in list2}
for item in list1:
    if item.id in lookup:
        process(item, lookup[item.id])

不必要的重新渲染(React):

// 差:每次渲染都创建新对象
<Component style={{ margin: 10 }} />

// 好:在外部定义或使用useMemo
const style = { margin: 10 };
<Component style={style} />

内存泄漏:

  • 未清理的事件监听器
  • 未清除的定时器
  • 循环引用
  • 无限增长的大型缓存

阻塞操作:

  • 同步文件I/O
  • UI线程中的长时间计算
  • 缺少分页

2. 数据库性能

检查:

  • 外键上缺少索引
  • 使用SELECT *而非指定列
  • 循环中的查询(N+1)
  • 缺少查询限制
  • 低效的JOIN操作

建议:

  • 添加索引:CREATE INDEX idx_user_id ON posts(user_id);
  • 使用预加载/预取
  • 实现分页
  • 使用数据库查询分析器(EXPLAIN)

3. 算法复杂度

识别:

  • O(n²)或更差的算法
  • 冗余计算
  • 不必要的排序
  • 低效的数据结构

常见修复:

  • 使用哈希映射实现O(1)查找,替代O(n)数组搜索
  • 二分查找O(log n)替代线性查找O(n)
  • 对重复计算使用记忆化
  • 对昂贵操作使用惰性求值

4. 前端性能

检查:

  • 过大的包体积
  • 未优化的图片
  • 缺少代码分割
  • 低效的React组件
  • 缺少记忆化

建议:

  • 懒加载:const Component = lazy(() => import('./Component'));
  • 图片优化
  • 对昂贵操作进行防抖/节流
  • 长列表使用虚拟滚动
  • 繁重计算使用Web Workers

5. 网络性能

问题:

  • HTTP请求过多
  • 负载过大
  • 缺少缓存
  • 同步请求

解决方案:

  • 打包/合并资源
  • 实现压缩(gzip, brotli)
  • 使用HTTP/2多路复用
  • 添加缓存头
  • 并行请求替代串行请求

6. 生成性能报告

性能分析
===================

关键问题(立即修复):
1. UserController.index中的N+1查询 (file.js:45)
   - 影响:每个请求产生100+次数据库查询
   - 修复:使用预加载或JOIN

2. EventEmitter中的内存泄漏 (file.js:120)
   - 影响:内存无限增长
   - 修复:在清理时移除监听器

高优先级:
3. processData中的O(n²)循环 (file.js:200)
   - 影响:大数据集下速度缓慢
   - 修复:使用哈希映射实现O(n)

中优先级:
4. 缺少图片优化
   - 影响:页面加载缓慢
   - 修复:使用next/image或手动优化

7. 性能分析工具

JavaScript:

  • Chrome DevTools性能面板
  • Node.js --inspect标志
  • console.time() / console.timeEnd()

Python:

  • cProfile模块
  • line_profiler
  • memory_profiler

数据库:

  • EXPLAIN / EXPLAIN ANALYZE
  • 慢查询日志
  • pg_stat_statements (PostgreSQL)

最佳实践

  • 优化前先进行性能分析
  • 关注热点路径(80/20法则)
  • 测量变更的影响
  • 权衡可读性与性能
  • 记录性能关键部分