介绍

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

安装指南

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

浏览器(推荐纯 JS)

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

浏览器(WASM 版本)

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

Node.js

npm
yarn
pnpm
bun
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

下一步