介绍
QRCode 是一个高性能、跨平台的 QRCode 生成库,支持多种运行时环境:浏览器(TypeScript/WASM)、Node.js、Bun 和原生 Rust。
为什么选 QRCode?
1. 极致性能
核心算法经过优化,各运行时性能表现优异:
单条生成性能对比(ops/s,越高越好):
Rust: ████████████████████████████████████████████████████████████████████ 54,283
Bun: ██████████████████████████████████████████████ 18,902
Node.js: ████████████████████████████████████ 12,078
2. 统一 API
无论你使用哪个包,API 设计保持一致,轻松切换运行环境:
// 浏览器 (纯 JS)
import { QRCode, QRErrorCorrectLevel } from '@veaba/qrcode-js';
const qr = new QRCode('https://example.com', QRErrorCorrectLevel.H);
const svg = qr.toSVG();
3. 丰富的输出格式
- SVG - 矢量图形,可缩放不失真
- PNG - Node.js/Bun 环境支持原生 PNG Buffer 输出
- DataURL - 前端可直接使用的 base64 格式
- 样式化 SVG - 支持渐变、圆角、自定义颜色等
4. SVG 验证
使用 bench/rust-tools 验证工具确保生成的二维码可被正确扫描:
cd bench/rust-tools
cargo run --release --features validation --bin veaba-qr -- "Hello World"
# 输出: ✅ 验证通过!
架构设计
┌─────────────────────────────────────────────────────────┐
│ 应用层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ @veaba/ │ │ @veaba/ │ │ @veaba/ │ │
│ │ qrcode-wasm │ │ qrcode-js │ │ qrcode-node │ │
│ │ (浏览器WASM)│ │ (浏览器JS) │ │ (Node.js) │ │
│ └──────┬──────┘ └──────┬──────┘ └────────┬────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ @veaba/ │ │ @veaba/ │ │ @veaba/ │ │
│ │ qrcode-bun │ │ qrcode-rust │ │ qrcode-shared │ │
│ │ (Bun) │ │ (原生 Rust) │ │ (共享核心) │ │
│ └──────┬──────┘ └──────┬──────┘ └────────┬────────┘ │
└─────────┼────────────────┼──────────────────┼───────────┘
│ │ │
└────────────────┴──────────────────┘
│
┌────────┴────────┐
│ 核心算法 │
│ - Reed-Solomon │
│ - 模块布局 │
│ - 掩码计算 │
└─────────────────┘
安装指南
根据你的运行环境选择对应的包:
浏览器(推荐纯 JS)
npm install @veaba/qrcode-js
浏览器(WASM 版本)
npm install @veaba/qrcode-wasm
Node.js
npm install @veaba/qrcode-node
Bun
bun add @veaba/qrcode-bun
Rust
[dependencies]
qrcode-rust = { git = "https://github.com/veaba/qrcodes" }
包对比
| 包 |
环境 |
特点 |
包大小 |
性能 |
@veaba/qrcode-js |
浏览器 |
纯 JS,无需 WASM,兼容性好 |
~15KB |
9,662 ops/s |
@veaba/qrcode-wasm |
浏览器 |
Rust 编译,性能更好 |
~45KB |
~15,000 ops/s |
@veaba/qrcode-node |
Node.js |
支持 PNG Buffer 输出 |
~20KB |
12,078 ops/s |
@veaba/qrcode-bun |
Bun |
批量性能最优 |
~20KB |
18,902 ops/s |
@veaba/qrcode-rust |
Rust |
原生性能,比 kennytm 快 8-10 倍 |
- |
54,283 ops/s |
性能对比概览
基于 2026-02-02 的基准测试结果:
| 测试项 |
@veaba/qrcode-rust |
@veaba/qrcode-bun |
@veaba/qrcode-node |
| 单条生成 (medium) |
54,283 ops/s |
18,902 ops/s |
12,078 ops/s |
| SVG 输出 |
92,486 ops/s |
18,003 ops/s |
10,150 ops/s |
| 纠错级别 H |
47,436 ops/s |
20,170 ops/s |
11,179 ops/s |
下一步