Skip to content

Commit 84a8dde

Browse files
committed
Optimize QR codec and fallback decoding
Add opt-in decodeQR moreEffort retries for rotated, cropped, and upscaled image candidates while preserving diagnostic coordinates and user callback errors. Speed up codec hot paths with direct bit I/O, cached templates/zigzag paths/RS divisors, faster grayscale stats, monochrome downsampling, and column penalty scans. benchmark/index.ts vs main: small encodes up to 3.4x faster, large encodes 2.3x faster, generated decodes 1.5-1.7x faster. Expand decode coverage with PNG vectors, more successful fixtures, and tests for fallback diagnostics, downsampling, and encoder validation.
1 parent 5967ce9 commit 84a8dde

6 files changed

Lines changed: 1212 additions & 261 deletions

File tree

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -245,25 +245,25 @@ Benchmarks measured with Apple M4 with node.js 25.
245245

246246
```
247247
# encode format=ascii
248-
@paulmillr/qr x 9,050 ops/sec @ 110μs/op
249-
qrcode-generator x 4,543 ops/sec @ 220μs/op
250-
nuintun x 3,413 ops/sec @ 292μs/op
248+
qr x 31,179 ops/sec @ 32μs/op
249+
qrcode-generator x 4,982 ops/sec @ 200μs/op
250+
nuintun x 3,735 ops/sec @ 267μs/op
251251
252252
# encode format=gif
253-
@paulmillr/qr x 8,439 ops/sec @ 118μs/op
254-
qrcode-generator x 2,909 ops/sec @ 343μs/op
255-
nuintun x 3,470 ops/sec @ 288μs/op
253+
qr x 28,111 ops/sec @ 35μs/op
254+
qrcode-generator x 3,154 ops/sec @ 317μs/op
255+
nuintun x 3,784 ops/sec @ 264μs/op
256256
257257
# encode of large qr
258-
@paulmillr/qr x 334 ops/sec @ 2ms/op
259-
qrcode-generator x 174 ops/sec @ 5ms/op
260-
nuintun x 221 ops/sec @ 4ms/op
258+
qr x 1,178 ops/sec @ 848μs/op
259+
qrcode-generator x 180 ops/sec @ 5ms/op
260+
nuintun x 237 ops/sec @ 4ms/op
261261
262262
# decode
263-
@paulmillr/qr x 662 ops/sec @ 1ms/op
264-
jsqr x 50 ops/sec @ 19ms/op
265-
nuintun x 49 ops/sec @ 20ms/op
266-
instascan x 128 ops/sec @ 7ms/op ± 31.44% (4ms..166ms)
263+
qr x 718 ops/sec @ 1ms/op
264+
jsqr x 53 ops/sec @ 18ms/op
265+
nuintun x 51 ops/sec @ 19ms/op
266+
instascan x 133 ops/sec @ 7ms/op ± 31.77% (3ms..164ms)
267267
```
268268

269269
## License

0 commit comments

Comments
 (0)