本文档提供各运行时的详细性能对比数据,帮助你选择最适合的包。
平台 : Windows
Node.js : v20.19.4
Bun : v1.3.0
Rust : v1.89.0
测试时间 : 2026-02-02
运行时
ops/s
单次耗时
相对性能
Rust (@veaba/qrcode-fast)
54,283
18.4 μs
🥇 最快
Rust (@veaba/qrcode-rust)
~19,608
51.0 μs
🥈 很快
Bun (medium)
20,718
48.3 μs
🥈 很快
Bun (short)
18,071
55.3 μs
🥈 很快
Node.js (medium)
13,723
72.9 μs
2.6x 慢
Node.js (short)
15,148
66.0 μs
2.3x 慢
单条生成 - 中等文本 (ops/s,越高越好)
Rust: ████████████████████████████████████████████████████████████████████ 54,283
Bun: ██████████████████████████████████████████████ 20,718
Node.js: ████████████████████████████████████ 13,723
运行时
ops/s
总耗时
相对性能
Bun
19,000
51.8 ms
🥇 基准
Rust 原生
~25,000
~40 ms
🥇 更快
Node.js
7,000
146.1 ms
2.8x 慢
批量 1000 条 (ops/s,越高越好)
Bun: ████████████████████████████████████████████████████████ 19,000
Node.js: ██████████████████████ 7,000
Rust 包对比(vs kennytm-qrcode)
测试项
@veaba/qrcode-rust
kennytm-qrcode
速度提升
单条生成
~51.0 µs
~438.3 µs
8.6x
批量 100 条
~4.01 ms
~32.13 ms
8.0x
纠错级别 L
~29.0 µs
~306.5 µs
10.6x
纠错级别 H
~42.0 µs
~446.2 µs
10.6x
结论 : @veaba/qrcode-rust 比 kennytm-qrcode 快 8-10 倍
@veaba/qrcode-node (Node.js)
单条生成 (short): 15,148 ops/s, 0.0660 ms/op
单条生成 (medium): 13,723 ops/s, 0.0729 ms/op
单条生成 (long): 3,932 ops/s, 0.2543 ms/op
单条生成 (unicode): 10,648 ops/s, 0.0939 ms/op
批量生成 (10 条): 13,050 ops/s, 0.7663 ms/op
批量生成 (100 条): 6,500 ops/s, 15.4275 ms/op
批量生成 (1000 条): 7,000 ops/s, 146.0795 ms/op
SVG 输出: 14,749 ops/s, 0.0678 ms/op
Styled SVG 输出: 8,409 ops/s, 0.1189 ms/op
PNG Buffer 输出: 3,472 ops/s, 0.2881 ms/op
纠错级别 L: 10,838 ops/s, 0.0923 ms/op
纠错级别 M: 10,986 ops/s, 0.0910 ms/op
纠错级别 Q: 10,862 ops/s, 0.0921 ms/op
纠错级别 H: 15,431 ops/s, 0.0648 ms/op
异步单条生成: 15,656 ops/s, 0.0639 ms/op
单条生成 (short): 18,071 ops/s, 0.0553 ms/op
单条生成 (medium): 20,718 ops/s, 0.0483 ms/op
单条生成 (long): 7,132 ops/s, 0.1402 ms/op
单条生成 (unicode): 17,586 ops/s, 0.0569 ms/op
批量生成 (10 条): 18,710 ops/s, 0.5344 ms/op
批量生成 (100 条): 16,900 ops/s, 5.9143 ms/op
批量生成 (1000 条): 19,000 ops/s, 51.7963 ms/op
SVG 输出: 21,235 ops/s, 0.0471 ms/op
Styled SVG 输出: 11,439 ops/s, 0.0874 ms/op
获取模块数据: 21,366 ops/s, 0.0468 ms/op
纠错级别 L: 31,739 ops/s, 0.0315 ms/op
纠错级别 M: 24,932 ops/s, 0.0401 ms/op
纠错级别 Q: 23,829 ops/s, 0.0420 ms/op
纠错级别 H: 24,058 ops/s, 0.0416 ms/op
异步单条生成: 15,768 ops/s, 0.0634 ms/op
TextEncoder 编码: 6,535,521 ops/s, 0.0002 ms/op
single_generation: time: [50.915 µs 51.030 µs 51.156 µs] (~19,608 ops/s)
batch_generation_100: time: [3.9972 ms 4.0068 ms 4.0165 ms] (~24,959 ops/s)
svg_generation: time: [34.599 µs 34.742 µs 34.894 µs] (~28,780 ops/s)
error_level_L: time: [28.890 µs 28.974 µs 29.058 µs] (~34,518 ops/s)
error_level_M: time: [28.605 µs 28.712 µs 28.837 µs] (~34,827 ops/s)
error_level_Q: time: [40.171 µs 40.480 µs 40.829 µs] (~24,703 ops/s)
error_level_H: time: [41.606 µs 41.960 µs 42.347 µs] (~23,832 ops/s)
@veaba/qrcode-fast (Rust 优化版)
single_generation: time: [18.420 µs] (~54,283 ops/s)
svg_generation: time: [10.810 µs] (~92,486 ops/s)
error_level_L: time: [16.300 µs] (~61,368 ops/s)
error_level_H: time: [21.080 µs] (~47,436 ops/s)
注: qrcode-fast 生成伪数据,仅用于性能测试
测试项
Node.js
Bun
Bun 优势
单条生成 (short)
15,148
18,071
+19.3%
单条生成 (medium)
13,723
20,718
+51.0%
单条生成 (long)
3,932
7,132
+81.4%
单条生成 (unicode)
10,648
17,586
+65.2%
批量生成 (10)
13,050
18,710
+43.4%
批量生成 (100)
6,500
16,900
+160.0%
批量生成 (1000)
7,000
19,000
+171.4%
SVG 输出
14,749
21,235
+44.0%
Styled SVG
8,409
11,439
+36.0%
纠错级别 L
10,838
31,739
+192.8%
纠错级别 M
10,986
24,932
+126.9%
纠错级别 Q
10,862
23,829
+119.4%
纠错级别 H
15,431
24,058
+55.9%
异步单条
15,656
15,768
+0.7%
不同纠错级别对性能的影响:
纠错级别
容错率
Rust
Bun
Node.js
L (低)
~7%
28.97 µs
31.5 µs
92.3 µs
M (中)
~15%
28.71 µs
40.1 µs
91.0 µs
Q (较高)
~25%
40.48 µs
42.0 µs
92.1 µs
H (高)
~30%
41.96 µs
41.6 µs
64.8 µs
包
压缩后
解压后
说明
@veaba/qrcode-js
8 KB
15 KB
纯 JS
@veaba/qrcode-wasm
25 KB
80 KB
含 .wasm
@veaba/qrcode-node
10 KB
20 KB
服务端
@veaba/qrcode-bun
10 KB
20 KB
服务端
运行时
冷启动
热启动
说明
Rust
0 ms
0 ms
原生代码
Bun
10 ms
5 ms
快速启动
Node.js
50 ms
30 ms
需加载模块
WASM
100 ms
0 ms
首次需初始化
场景
推荐包
原因
前端生产环境
@veaba/qrcode-js
包小,无需 WASM 初始化
前端高性能
@veaba/qrcode-wasm
浏览器中更快
Node.js 后端
@veaba/qrcode-node
支持 PNG,生态丰富
Bun 后端
@veaba/qrcode-bun
批量性能最优(快 2-3 倍)
Rust 项目
@veaba/qrcode-rust
极致性能,比 kennytm 快 8-10 倍
边缘计算
@veaba/qrcode-bun
启动快,批量性能优
性能需求
推荐运行时
预期 ops/s
极致性能
Rust 原生 (@veaba/qrcode-fast)
54,000+
生产 Rust
@veaba/qrcode-rust
19,000+
批量生成
Bun
20,000
前端高性能
WASM
~15,000
一般需求
Node.js
13,000-15,000
功能需求
推荐包
PNG 输出
@veaba/qrcode-node / @veaba/qrcode-bun
样式化 SVG
任意包(都支持)
批量生成
@veaba/qrcode-bun / @veaba/qrcode-rust
最小包体积
@veaba/qrcode-js
SVG 验证
使用 bench/rust-tools
使用 bench/rust-tools 验证生成的 SVG:
cd bench/rust-tools
cargo run --release --features validation --bin veaba-qr -- " Hello World"
# 输出示例:
# 📦 @veaba/qrcode-rust
# ⏱️ 生成耗时: 66.7µs
# 🔍 验证中...
# ✅ 验证通过!
验证结果:
✅ @veaba/qrcode-rust - 生成的 SVG 可通过标准二维码扫描器正确解码
⚠️ @veaba/qrcode-fast - 生成伪数据,仅用于性能测试
所有公开包都内置缓存系统:
// 浏览器环境
import { QRCode , QRErrorCorrectLevel } from '@veaba/qrcode-js' ;
const qr = new QRCode ( 'https://example.com' , QRErrorCorrectLevel . H ) ;
// 实例可复用
// Bun 批量性能最优
import { QRCode , QRErrorCorrectLevel } from '@veaba/qrcode-bun' ;
const texts = Array . from ( { length : 1000 } , ( _ , i ) => `https://example.com/${ i } ` ) ;
const svgs = texts . map ( text => {
const qr = new QRCode ( text , QRErrorCorrectLevel . H ) ;
return qr . toSVG ( 256 ) ;
} ) ;
// WASM 中复用实例
const qr = new QRCode ( 'text' , QRErrorCorrectLevel . H ) ;
// 复用同一实例
cd packages/qrcode-node
node benchmark/index.js
cd packages/qrcode-bun
bun run benchmark/index.ts
cd packages/qrcode-rust
cargo bench --bench comparison_bench
# 使用 rust-tools 验证
cd bench/rust-tools
cargo run --release --features validation --bin veaba-qr -- " 你的文本"
2026-02-02 : 更新测试数据,基于最新基准测试
添加了 @veaba/qrcode-fast 的性能数据
添加了与 kennytm-qrcode 的对比数据
添加了 SVG 验证说明
2026-02-01 : 初始测试数据
数据可能因硬件和版本不同有所差异