$ terminals _

hyperfine

命令行基准测试工具

GitHub brew install hyperfine

简介

hyperfine 是一款由 Rust 编写的命令行基准测试工具,由 bat 和 fd 的作者 sharkdp 开发。它能够精确测量命令的执行时间,自动进行多次运行以获得统计学上可靠的结果,并支持多个命令之间的对比测试。

与简单的 time 命令不同,hyperfine 提供了预热运行、参数化基准测试、统计分析、结果导出等专业功能。无论是比较不同工具的性能差异,还是优化脚本的执行效率,hyperfine 都是不可或缺的测量工具。

安装

# macOS
brew install hyperfine

# Ubuntu/Debian
sudo apt install hyperfine

# Cargo
cargo install hyperfine

核心特性

  • 统计分析: 自动计算平均值、标准差、最小/最大值等统计指标
  • 预热运行: 支持预热运行次数配置,排除冷启动影响
  • 对比测试: 同时测试多个命令并显示相对性能差异
  • 参数化测试: 支持参数范围遍历,批量测试不同输入
  • 结果导出: 支持导出为 JSON、CSV、Markdown 等格式
  • Shell 选择: 可指定使用的 Shell 或直接执行命令

使用示例

# 基本用法:测量单个命令
hyperfine 'sleep 0.3'

# 对比两个命令的性能
hyperfine 'fd -e py' 'find . -name "*.py"'

# 设置预热次数和最少运行次数
hyperfine --warmup 3 --min-runs 20 'rg "pattern" .'

# 参数化基准测试
hyperfine --parameter-scan threads 1 8 'make -j {threads}'

# 在每次运行前执行准备命令(如清空缓存)
hyperfine --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' 'cat largefile'

# 导出结果为 Markdown 表格
hyperfine 'ripgrep pattern' 'grep -r pattern' --export-markdown results.md

# 导出为 JSON 用于进一步分析
hyperfine 'command1' 'command2' --export-json results.json

典型场景

场景一:对比新旧实现的性能差异

重构代码后验证是否真的变快了:

# 对比 find 和 fd 的搜索速度
hyperfine --warmup 5 \
  'find . -name "*.py" -type f' \
  'fd -e py'
# 输出类似:
# fd ran 8.53 ± 0.32 times faster than find

# 对比两个 Python 脚本的执行时间
hyperfine --warmup 3 \
  'python old_process.py data.csv' \
  'python new_process.py data.csv'

场景二:排查脚本启动慢的原因

Shell 脚本或 CLI 工具启动延迟高,逐步排查:

# 测量 zsh 启动时间(检测插件影响)
hyperfine --warmup 10 'zsh -i -c exit'

# 对比加载不同插件的启动时间
hyperfine \
  'zsh --no-rcs -c exit' \
  'zsh -i -c exit'

# 找到最慢的 zsh 插件:时间差即为插件开销

场景三:参数扫描——找最优线程数

# 找出 make -j N 中最优的并行数
hyperfine --parameter-scan threads 1 16 \
  --prepare 'make clean' \
  'make -j {threads}'

# 输出每个 N 的耗时,直观显示最优点