Skip to content

Commit 4daed1c

Browse files
committed
feat(bson): decrease threshold to when TextDecoder is used to decoder utf8
This increases performance dramatically for anything bigger than 8 bytes. Old: 🏎 x 13,430,773.15 ops/sec ±0.53% 0.0000000744558775 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 8 bytes 🏎 x 8,041,107.43 ops/sec ±0.35% 0.00000012436098 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 16 bytes 🏎 x 5,014,819.93 ops/sec ±0.35% 0.0000001994089545 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 32 bytes 🏎 x 2,874,768.67 ops/sec ±1.13% 0.0000003478540759 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 64 bytes 🏎 x 1,526,007.11 ops/sec ±1.41% 0.0000006553049416 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 128 bytes 🏎 x 796,015.79 ops/sec ±1.41% 0.0000012562564796 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 256 bytes 🏎 x 403,319.26 ops/sec ±4.56% 0.0000024794253695 sec/op ▆▆▇▅▅▅▆▅▆▆▆▆▅▆▆▆▆▆▆▆▅▅▅ decodeUTF8 512 bytes 🏎 x 6,315,228.55 ops/sec ±0.32% 0.0000001583473967 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 513 bytes 🏎 x 4,742,931.02 ops/sec ±1.36% 0.0000002108400895 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 1024 bytes New: 🏎 x 14,662,145.39 ops/sec ±0.85% 0.000000068202843 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 8 bytes 🏎 x 11,979,008.35 ops/sec ±0.71% 0.0000000834793641 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 16 bytes 🏎 x 11,702,257.92 ops/sec ±1.03% 0.0000000854535942 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 32 bytes 🏎 x 11,338,091.96 ops/sec ±0.89% 0.0000000881982616 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 64 bytes 🏎 x 10,793,880.52 ops/sec ±0.62% 0.000000092645087 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 128 bytes 🏎 x 9,708,723.67 ops/sec ±0.40% 0.0000001030001506 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 256 bytes 🏎 x 8,184,335.32 ops/sec ±0.59% 0.0000001221846321 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 512 bytes 🏎 x 8,155,085.35 ops/sec ±0.64% 0.0000001226228736 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 513 bytes 🏎 x 5,706,045.52 ops/sec ±0.70% 0.0000001752527205 sec/op ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ decodeUTF8 1024 bytes
1 parent 3138671 commit 4daed1c

2 files changed

Lines changed: 3 additions & 2 deletions

File tree

packages/bson/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ export * from './src/bson-parser.js';
1313
export { BaseParser } from './src/bson-parser.js';
1414
export * from './src/bson-deserializer.js';
1515
export * from './src/bson-serializer.js';
16+
export * from './src/strings.js';

packages/bson/src/strings.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import { BSONError } from './model.js';
1313
const decoder = new TextDecoder('utf-8');
1414

1515
export function decodeUTF8(buffer: Uint8Array, off: number = 0, end: number) {
16-
if (end - off > 512) {
17-
return decoder.decode(buffer.slice(off, end));
16+
if (end - off > 8) {
17+
return decoder.decode(buffer.subarray(off, end));
1818
} else {
1919
return decodeUTF8Short(buffer, off, end);
2020
}

0 commit comments

Comments
 (0)