介绍

QRCode 是一个高性能、跨平台的 QRCode 生成库,支持多种运行时环境:浏览器(TypeScript/WASM)、Node.js、Bun 和原生 Rust。

为什么选 QRCode?

1. 极致性能

核心算法经过优化,各运行时性能表现优异。

Rust 三方端到端 SVG 生成(µs/条,越低越好;来源 benchmark_speedup_verified.json):

qrcode-fast     ████                                        18.5 µs
qrcode-rust     ███████                                     32.1 µs
kennytm-qrcode  ███████████████████████████████████████████ 210.4 µs
                                                  (Hello World, 11B)

以上数字来自权威文件 benchmark_speedup_verified.json, 仅覆盖 Rust 三方实现。

2. 统一 API

无论你使用哪个包,API 设计保持一致,轻松切换运行环境:

浏览器 (JS)
浏览器 (WASM)
Node.js
Bun
Rust
// 浏览器 (纯 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 │  │ js-shared   │  │
│  │ (Bun)       │  │ (原生 Rust) │  │ (共享核心)      │  │
│  └──────┬──────┘  └──────┬──────┘  └────────┬────────┘  │
└─────────┼────────────────┼──────────────────┼───────────┘
          │                │                  │
          └────────────────┴──────────────────┘
                             │
                    ┌────────┴────────┐
                    │   核心算法       │
                    │  - Reed-Solomon │
                    │  - 模块布局      │
                    │  - 掩码计算      │
                    └─────────────────┘

安装指南

根据你的运行环境选择对应的包:

浏览器(推荐纯 JS)

npm
yarn
pnpm
bun
deno
npm install @veaba/qrcode-js

浏览器(WASM 版本)

npm
yarn
pnpm
bun
deno
npm install @veaba/qrcode-wasm

Node.js

npm
yarn
pnpm
bun
deno
npm install @veaba/qrcode-node

Bun

bun add @veaba/qrcode-bun

Rust

[dependencies]
qrcode-rust = { git = "https://github.com/veaba/qrcodes" }

包对比

⚠️ 「性能」一列的数据来自不同基准测试,口径不统一,不可横向比较; 未标注来源的历史数字(如 54,283 ops/s)源自一次会生成伪数据的构建,已作废。 权威数据见 benchmark_speedup_verified.json。

包环境特点包大小参考性能
@veaba/qrcode-js浏览器纯 JS,无需 WASM,兼容性好~15KB未统一测量
@veaba/qrcode-wasm浏览器Rust 编译,性能更好~45KB未统一测量
@veaba/qrcode-nodeNode.js支持 PNG Buffer 输出~20KB未统一测量
@veaba/qrcode-bunBun批量性能最优~20KB未统一测量
@veaba/qrcode-fastRust极致性能,比 kennytm 快 9-19 倍-18.5-64.4 µs / 条
@veaba/qrcode-rustRust功能完整,比 kennytm 快 6-9 倍-32.1-130.2 µs / 条

性能对比概览

Rust 三方端到端 SVG 生成实测(Rust 1.89.0, release, 100 次平均):

测试用例qrcode-fastqrcode-rustkennytm-qrcode
Hello World (11B)18.5 µs32.1 µs210.4 µs
Test QR Code 123 (17B)19.8 µs41.3 µs324.1 µs
URL (31B)24.2 µs53.2 µs453.3 µs
长文本 (74B)64.4 µs130.2 µs826.2 µs

Node.js / Bun 与 Rust 之间的倍率不予提供:两组数据出自不同的测量程序与不同的机器, 相除得到的倍数没有意义。

⚠️ 历史上此处曾列出 Node.js 与 Bun 的对比(8,487 / 7,576 ops/s)。 该对比同时变动了「运行时」与「实现」两个变量 —— @veaba/qrcode-node 与 @veaba/qrcode-bun 是两套不同的实现,因此无法归因到任一因素,已删除。

下一步