mcpField
P
profile-dart-code

profile-dart-code

github.com/kevmoo开发14861 次安装2 周前更新
代码仓库

关于 profile-dart-code

这是一套用于分析 Dart 命令行程序 CPU 执行情况的技能和辅助脚本。它通过 VM Service 采集样本,按 CPU 使用情况列出函数,并将完整配置文件导出为 JSON。

主要功能

  1. 01采集 Dart VM CPU 样本
  2. 02按样本占比排列函数
  3. 03导出原始 JSON 配置文件
  4. 04设置采样间隔和输出路径

适用场景

  1. 01查找 Dart CLI 中的 CPU 高耗函数
  2. 02排查开销较大的循环或调用
  3. 03比较优化前后的性能分析结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kevmoo/dash_skills --skill profile-dart-code

安装后在 Claude Code 中输入/profile-dart-code确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
scripts/
pubspec.yaml
scripts/bin/
profile.dart
scripts/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 性能分析。

工作流

  1. 确保编译正常:确保目标 Dart 脚本能够正常运行(dart run <script.dart>)。
  2. 运行性能分析脚本:使用此技能目录中的自动化性能分析辅助脚本启动目标应用,并启用 VM Service 可观测性、采集 CPU 样本并输出耗时最多的函数。
  3. 分析并优化:查看工具报告的自身样本和总样本百分比,以找出瓶颈(例如,过度分配对象、哈希计算开销大、虚分派开销)。

运行性能分析辅助脚本

此仓库包含一个零依赖(仅使用官方 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

解读性能分析数据的最佳实践

  1. 关注自身占比和总占比:self % 较高表示 CPU 时间直接花在函数自身的代码体中(数学运算、循环分支、数组索引)。total % 较高而 self % 较低,表示耗时集中在分发器或外层编排循环。
  2. 留意隐藏开销:注意紧密循环中的隐式对象分配(_copyData、迭代器包装器、闭包创建)。
  3. 通过实测验证优化效果:应用优化前后,务必记录基准样本数量和执行时长(time -v)。

评论

支持 Markdown