用途:分析 Elixir/Phoenix 项目中的性能问题,覆盖 Ecto、LiveView 与 OTP 三个层面,并按影响与修复成本给出优先级。触发场景包括慢页面或慢查询、超时、高内存、GenServer 瓶颈、N+1 查询和 assign 膨胀。
主要能力:提供多轨道分析。Ecto 轨道检查 N+1、缺失 preload、未加索引查询及低效模式,如循环中的 Repo.all、Enum.map 内调用 Repo、WHERE/JOIN 列无索引。LiveView 轨道检查大 assign、列表未用 streams、无界增长的 assign、过重的 handle_info、慢操作未用 assign_async。OTP 轨道仅在指定时启用,检查 GenServer 邮箱增长、热路径同步调用、缺少 Task.async 并行处理、读密集状态可用 ETS 的机会。
使用方式:支持以下命令,参数为可选模块或上下文路径及 --focus 标志: /phx:perf /phx:perf lib/my_app/accounts.ex /phx:perf --focus ecto /phx:perf --focus liveview /phx:perf --focus otp
工作流:先确定范围,未指定文件时扫描项目热点路径;按 focus 并行启动分析;对每个发现按 2x2 矩阵(影响×成本)评分——高影响低成本为 DO FIRST,高影响高成本为 PLAN,低影响低成本为 QUICK WIN,低影响高成本为 SKIP;按优先级呈现前五项,每项含影响、位置、当前模式、修复方式与预估收益;最后提供后续步骤选项,如 /phx:plan、/phx:quick、/phx:investigate。
原则与限制:优化前必须先测量;数据库优先,资料称约 90% 的 Elixir 性能问题与查询相关;一次只做一处改动以便衡量影响;禁止在 dev 模式做基准测试,必须使用 MIX_ENV=prod,因为 dev 模式包含代码重载、调试日志和未优化编译,会使结果失真。若可用 Tidewave MCP,可用 mcp__tidewave__project_eval 运行 EXPLAIN ANALYZE、检查 Process.info(pid, :message_queue_len),并用 mcp__tidewave__execute_sql_query 检查缺失索引。参考资料含 benchmarking.md(Benchee 模式、性能剖析、火焰图)。具体收益数字、价格与平台信息暂未提供。