关于 elixir-performance-review
用于评估 Elixir 代码性能的审查 Skill,提供 GenServer、内存、并发和数据库模式的检查清单与参考。要求审查者在报告问题前以具体证据验证发现。
主要功能
- 01GenServer 瓶颈检查
- 02内存与二进制处理检查
- 03并发与背压检查
- 04数据库查询审查清单
- 05证据与验证关卡
适用场景
- 01检查 Elixir 改动中的阻塞回调
- 02审查大数据处理与进程增长
- 03报告前验证性能发现
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill elixir-performance-review安装后在 Claude Code 中输入/elixir-performance-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/concurrency.mdets-patterns.mdgenserver-bottlenecks.mdmemory.md详细介绍
Elixir 性能审查
快速参考
| 问题类型 | 参考资料 |
|---|---|
| 邮箱溢出、阻塞调用 | references/genserver-bottlenecks.md |
| 何时使用 ETS、读写并发 | references/ets-patterns.md |
| 二进制数据处理、大型消息 | references/memory.md |
| Task 模式、流量控制 | references/concurrency.md |
审查清单
GenServer
- 不会成为所有请求的单进程瓶颈
- handle_call/cast 中没有阻塞操作
- 超时配置恰当
- 对读密集型状态考虑使用 ETS
内存
- 大型二进制数据不会在进程间复制
- 对大型数据转换使用流
- 不会无限制地累积数据
并发
- 动态任务使用 Task.Supervisor(而非原始的 Task.async)
- 不会无限制地创建进程
- 为消息生产者设置了恰当的背压
数据库
- 预加载数据以避免 N+1 查询
- 对大型结果集进行分页
- 为频繁查询创建索引
有效模式(不要标记)
- 低吞吐量场景使用单个 GenServer - 并非所有状态都需要横向扩展
- 关键路径使用同步调用 - 一致性可能要求这样做
- 不使用 ETS 的内存状态 - 对于较小的状态,ETS 会带来开销
- 小型集合使用 Enum 而非 Stream - Stream 的开销不值得
依上下文判断的规则
| 问题 | 仅当以下条件成立时才标记 |
|---|---|
| GenServer 瓶颈 | 处理速率 > 1000 req/sec,或回调中存在阻塞 I/O |
| 使用流 | 处理 > 10k 个项目,或读取大型文件 |
| 使用 ETS | 读写比 > 10:1,且存在并发访问 |
报告前的关卡
按顺序完成以下步骤,进行性能审查。每一步通过前,不要发布发现。
- 已加载协议 — 阅读 审查验证协议,并针对每项发现应用其中对热点路径、并发和资源使用的检查。通过标准: 对于每项实质性发现,你都能指出符合的协议小节,或说明 N/A 并给出理由(例如,仅引用此技能的有效模式)。
- 证据有明确定位 — 通过标准: 每项发现都包含具体定位信息:
path:line(或行范围),或Module.function/arity加上文件中的简短引用片段。 - 性能声明 — 对于 依上下文判断的规则 中的任何内容,或任何关于瓶颈、N+1、无界增长或高内存/二进制开销的声明,通过标准: 说明满足“仅当以下条件成立时才标记”的观察到或测量到的事实(例如速率、项目数量、比率),或附上佐证材料(性能分析器输出、SQL/日志摘录、
grep/搜索范围);否则将其降级为问题 / 疑似问题,并说明哪些内容尚未验证。
提交发现前
先完成上文的报告前的关卡;验证协议是这些关卡的必备输入。
评论
支持 Markdown