关于 profile-dart-code
这是一套用于分析 Dart 命令行程序 CPU 执行情况的技能和辅助脚本。它通过 VM Service 采集样本,按 CPU 使用情况列出函数,并将完整配置文件导出为 JSON。
主要功能
- 01采集 Dart VM CPU 样本
- 02按样本占比排列函数
- 03导出原始 JSON 配置文件
- 04设置采样间隔和输出路径
适用场景
- 01查找 Dart CLI 中的 CPU 高耗函数
- 02排查开销较大的循环或调用
- 03比较优化前后的性能分析结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ kevmoo/ dash_skills --skill profile-dart-code安装后在 Claude Code 中输入/profile-dart-code确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonscripts/pubspec.yamlscripts/bin/profile.dartscripts/test/profile_test.dart详细介绍
Dart CPU 性能分析
用于采集 CPU 性能分析数据并识别 Dart 命令行应用瓶颈的指南和自动化工具。
何时使用此技能
- 当有人要求分析、优化或评测 Dart 脚本或 CLI 工具的 CPU 执行情况时。
- 当调查热点循环、高开销函数调用或意外的执行开销时。
何时不使用(弃用防护)
以下情况不要使用此技能进行性能分析:
- 纯 I/O 瓶颈:性能瓶颈在于网络延迟、数据库查询或磁盘 I/O 等待,而非 CPU 执行。
- Flutter UI 应用:目标是需要进行帧性能分析、检查光栅线程或跟踪 Widget 重建的 Flutter 应用(请使用 Flutter DevTools 或
widget_inspector)。 - 短时微基准测试:运行时间仅为几毫秒的微基准测试,其结果会受 VM 预热和采样开销影响(请改用
package:benchmark_harness或package:bench_press)。 - 目标无法正常运行:如果目标脚本编译失败或启动时崩溃,请先修复功能错误,再进行 CPU 性能分析。
工作流
- 确保编译正常:确保目标 Dart 脚本能够正常运行(
dart run <script.dart>)。 - 运行性能分析脚本:使用此技能目录中的自动化性能分析辅助脚本启动目标应用,并启用 VM Service 可观测性、采集 CPU 样本并输出耗时最多的函数。
- 分析并优化:查看工具报告的自身样本和总样本百分比,以找出瓶颈(例如,过度分配对象、哈希计算开销大、虚分派开销)。
运行性能分析辅助脚本
此仓库包含一个零依赖(仅使用官方 vm_service)性能分析脚本,可启动任意 Dart 文件、连接到 VM Service、等待执行完成(--pause-isolates-on-exit)、获取 CPU 样本、打印清晰的摘要,同时导出完整的 JSON 性能分析数据。
可从任意工作目录运行:
dart run <dash_skills_repo>/skills/profile-dart-code/scripts/bin/profile.dart --out=cpu_profile.json -- <path_to_target.dart> [target_arguments...]
脚本参数
-o, --out=<file>:保存原始 JSON CPU 性能分析数据的输出文件路径(默认:cpu_profile.json)。-p, --period=<micros>:采样间隔,单位为微秒(默认:1000µs = 1ms)。最小值为50µs。-- <target.dart> [args...]:要进行性能分析的 Dart 脚本,后面可跟传递给main()的任意参数。
警告
可能挂起:使用 VM 服务对 Dart 目标进行性能分析或调试时,目标异常或连接问题可能导致进程无限期挂起。请确保目标脚本能够处理超时,并监控进程输出。
输出示例
Connecting to VM service at ws://127.0.0.1:8181/ws...
Target execution paused at exit. Retrieving CPU profile samples...
=== Top CPU Functions (Self Samples) ===
1. _PuzzleSmart._shiftSlice (self: 34.2%, total: 41.0%)
2. _countInversions (self: 18.5%, total: 18.5%)
3. shortestPaths (self: 12.1%, total: 98.4%)
Saved complete JSON profile to: cpu_profile.json
解读性能分析数据的最佳实践
- 关注自身占比和总占比:
self %较高表示 CPU 时间直接花在函数自身的代码体中(数学运算、循环分支、数组索引)。total %较高而self %较低,表示耗时集中在分发器或外层编排循环。 - 留意隐藏开销:注意紧密循环中的隐式对象分配(
_copyData、迭代器包装器、闭包创建)。 - 通过实测验证优化效果:应用优化前后,务必记录基准样本数量和执行时长(
time -v)。
评论
支持 Markdown