Rust QRCode 性能比较

测试环境

  • 平台: Windows
  • Rust: rustc 1.89.0
  • 测试时间: 2026-02-02

比较的包

  • qrcode-rust - 功能完整的 Rust QRCode 实现
  • qrcode-fast - 极致性能优化版本
  • kennytm-qrcode - 流行的 Rust QRCode 库(作为基准)

📊 性能可视化

性能对比

性能对比 (µs/op) - 越低越好

单条生成54.4 µs25.5 µs454.6 µsSVG 生成35.9 µs10.5 µs4.1 µs批量 1004.21 ms2.09 ms34.12 msqrcode-rustqrcode-fastkennytm-qrcode

不同纠错级别性能

不同纠错级别性能 (µs/op)

30.7
16.0
323.9
L (低)
34.1
16.3
324.1
M (中)
63.6
17.0
327.8
Q (较高)
44.9
19.8
491.1
H (高)
qrcode-rust
qrcode-fast
kennytm-qrcode

🚀 性能提升

🚀 性能提升倍数(相对于 kennytm-qrcode)

@veaba 包相对于 kennytm-qrcode 的性能提升:

单条生成
8.4x
qrcode-rust
|
17.8x
qrcode-fast
批量 100 条
8.1x
qrcode-rust
|
16.3x
qrcode-fast
纠错级别 L
10.6x
qrcode-rust
|
20.3x
qrcode-fast
纠错级别 H
10.9x
qrcode-rust
|
24.8x
qrcode-fast

📋 功能对比

功能qrcode-rustqrcode-fastkennytm-qrcode
SVG 输出
PNG 输出
字符串输出
自定义样式完整完整有限
纠错级别 L/M/Q/H
异步支持
WASM 支持
Node.js 绑定计划中计划中
性能优化优秀极致良好

性能测试结果

三者对比

基于 criterion 基准测试框架的最新结果(2026-02-02):

测试项 qrcode-rust qrcode-fast kennytm-qrcode rust 提升 fast 提升
单条生成 ~54.4 µs ~25.5 µs ~454.6 µs 8.4x 17.8x
批量生成 (100条) ~4.21 ms ~2.09 ms ~34.12 ms 8.1x 16.3x
SVG 生成 ~35.9 µs ~10.5 µs ~4.1 µs* 0.1x 0.4x
纠错级别 L ~30.7 µs ~16.0 µs ~323.9 µs 10.6x 20.3x
纠错级别 M ~34.1 µs ~16.3 µs ~324.1 µs 9.5x 19.9x
纠错级别 Q ~63.6 µs ~17.0 µs ~327.8 µs 5.2x 19.3x
纠错级别 H ~44.9 µs ~19.8 µs ~491.1 µs 10.9x 24.8x

*注:kennytm-qrcode 的 SVG 生成使用了不同的渲染方式,直接输出字符而不是 SVG XML,所以看起来更快,但功能不同

文本长度对比

文本长度 qrcode-rust qrcode-fast kennytm-qrcode rust 提升 fast 提升
短文本 (12 chars) ~33.7 µs ~16.0 µs ~204.2 µs 6.1x 12.8x
中等文本 (36 chars) ~56.4 µs ~25.5 µs ~471.6 µs 8.4x 18.5x
长文本 (98 chars) ~153.5 µs ~65.2 µs ~1050.9 µs 6.8x 16.1x

验证结果

使用 rust-tools 验证工具对生成的 SVG 进行验证:

# 生成并验证二维码
cargo run --release --features validation --bin validate-qr -- "Hello World"

# 输出:
# 🚀 QRCode 生成 + 验证工具
# ═══════════════════════════════════════
# 文本: Hello World
# 
# ✅ 验证通过!
#    二维码可以被正确扫描
#    内容匹配: 'Hello World'

验证结论:

  • qrcode-rust 生成的二维码 SVG 可以通过标准二维码扫描器正确解码,内容匹配
  • qrcode-fast 生成的二维码也可正确解码

与 kennytm-qrcode 的兼容性

经过详细调试和修复,qrcode-rustqrcode-fast 现在与 kennytm-qrcode 在以下方面保持一致:

测试内容 结果 说明
"Hello World" (v1) ✅ 完全匹配 模块矩阵与 kennytm 完全一致
"Test QR Code 123" (v2) ✅ 验证通过 使用 mask pattern 0,可正确扫描
格式信息 ✅ 正确放置 水平和垂直格式信息位置与 kennytm 一致
Mask Pattern ✅ 正确应用 Mask pattern 0: (row + col) % 2 == 0

关键修复 (2026-02-02)

  1. 格式信息放置修复

    • 垂直方向(第8列):从上到下正确放置
    • 水平方向(第8行):从右到左正确放置
    • 正确处理 test 模式(格式信息位在 test 模式下为白色)
  2. Mask Pattern 修复

    • 统一使用 mask pattern 0: (row + col) % 2 == 0
    • 确保与 kennytm 的默认选择一致

使用建议

场景 推荐包 原因
通用场景 qrcode-rust 功能完整,性能优秀,比 kennytm 快 8-10 倍
极致性能 qrcode-fast 比 kennytm 快 15-25 倍,功能完整
兼容性优先 kennytm-qrcode 社区成熟,文档丰富
WASM 场景 qrcode-rustqrcode-fast 两者都支持 WASM

运行基准测试

# 运行 Rust 基准测试(包含三者对比)
cd packages/qrcode-rust
cargo bench --bench comparison_bench

# 查看详细报告
target/criterion/report/index.html

# 使用 rust-tools 验证生成的 SVG
cd bench/rust-tools
cargo run --release --features validation --bin validate-qr -- "你的文本"

详细报告位置

基准测试的详细报告生成在:

  • target/criterion/ - Criterion 基准测试报告

可以使用浏览器打开查看图表和详细分析:

# 在 Windows 上
start target/criterion/report/index.html

技术细节

测试方法

使用 Criterion.rs 进行基准测试:

  • 预热时间: 3 秒
  • 采样次数: 100 次
  • 测量时间: 约 5 秒/测试

测试数据

  • 短文本: "https://a.co" (12 字符)
  • 中等文本: "https://github.com/veaba/qrcodes" (36 字符)
  • 长文本: 包含多个参数的 URL (98 字符)

SVG 验证工具

位于 bench/rust-tools,提供以下功能:

  • validate-qr - 生成并验证二维码
  • compare_matrix - 对比模块矩阵与 kennytm
  • compare_matrix_v1 - 对比版本 1 的矩阵

数据文件: backend_benchmark_pk.json | backend_benchmark_pk_summary.json

测试代码: packages/qrcode-rust/benches/comparison_bench.rs

最后更新: 2026-02-02 (添加 qrcode-fast 对比,格式信息修复完成)