简介
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 的耗时,直观显示最优点