SuperAPI AI 工具集

code-perf

编程与开发

查看项目

更新于 10-16 05:39

技能介绍

用途

Code Perf 是一个性能分析与优化工作流技能,适用于代码运行缓慢、存在内存问题或需要性能优化的场景。当出现“slow”“performance”“optimize”“memory”等触发词时,该技能可提供系统化的性能调优指导。

核心原则

该技能强调一条黄金法则:没有分析就不优化。在未测量瓶颈位置之前进行修改会浪费时间,甚至可能使情况恶化。因此,工作流始终从性能分析开始。

工作流程

  1. 分析(Profile):测量当前性能。需要回答的问题包括:什么慢(端点、操作、页面加载)?有多慢(延迟、吞吐量)?在什么条件下(负载、数据量)?常用工具包括浏览器 DevTools 的 Performance 面板、Node clinic.js、Python cProfile、Go pprof。

  2. 识别(Identify):找到热点路径。关注被多次调用的函数、大量内存分配、阻塞 I/O、不必要的计算。

  3. 优化(Optimize):应用合适的优化模式。

  4. 验证(Verify):重新分析以确认改进效果。

常见瓶颈

技能整理了常见瓶颈模式及其症状与解决方案:

  • N+1 查询:症状为多次数据库查询,解决方案是预加载、批量处理。
  • 内存泄漏:症状为 RSS 持续增长,解决方案是清理缓存、使用弱引用。
  • 阻塞 I/O:症状为线程阻塞,解决方案是异步、工作线程池。
  • 不必要的工作:症状为 CPU 占用高,解决方案是跳过冗余计算。
  • 大数据:症状为序列化缓慢,解决方案是分页、流式处理。

优化模式

技能提供了多种优化模式的代码示例:

缓存:在数据库查询前先检查 Redis 缓存,未命中再查询数据库并写入缓存。

懒加载:将一次性加载全部数据改为分页加载,例如使用 take 和 skip 参数。

连接池:避免每次新建连接,改用连接池(如 max: 20)并复用 pool.query()。

性能分析工具

技能列出了各语言的常用分析命令:

Node.js:

  • CPU 分析:node --prof app.js
  • 内存:node --inspect app.js(Chrome DevTools)
  • clinic.js:npx clinic doctor -- node app.js

Python:

  • cProfile:python -m cProfile -o profile.prof app.py
  • 查看:python -m cProfile -s cumulative app.py

Go:

  • pprof:go test -cpuprofile=cpu.prof
  • go tool pprof cpu.prof
  • Web 界面:go tool pprof -http=:8080 cpu.prof

技能加载建议

如果优化涉及查询,可加载 python-sqlalchemy 或 typescript-drizzle-orm;如果涉及内存问题,可加载堆快照相关技能;如果涉及数据库,可加载相应的数据库技能。

适用场景与限制

该技能适用于后端服务、数据库查询、内存管理等性能调优场景,提供的是工作流指导和常见模式参考。具体优化效果取决于实际代码和运行环境,技能本身不保证特定性能提升数值。部分引用文件(如 references/common-bottlenecks.md、references/optimization-patterns.md、references/profiling-tools.md)的具体内容在提供的资料中未完整展开。