Skip to content

Commit 0096464

Browse files
committed
perf(json-pack): ⚡️ speed up length encoding
1 parent 71b72a4 commit 0096464

File tree

1 file changed

+15
-23
lines changed

1 file changed

+15
-23
lines changed

src/json-pack/resp/RespEncoder.ts

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -52,31 +52,23 @@ export class RespEncoder<W extends IWriter & IWriterGrowable = IWriter & IWriter
5252
}
5353

5454
protected writeLength(length: number): void {
55-
let digits = 1;
56-
if (length < 10000) {
57-
if (length < 100) {
58-
if (length < 10) digits = 1;
59-
else digits = 2;
60-
} else {
61-
if (length < 1000) digits = 3;
62-
else digits = 4;
63-
}
64-
} else if (length < 100000000) {
65-
if (length < 1000000) {
66-
if (length < 100000) digits = 5;
67-
else digits = 6;
68-
} else {
69-
if (length < 10000000) digits = 7;
70-
else digits = 8;
71-
}
72-
} else {
73-
let pow = 10;
74-
while (length >= pow) {
75-
digits++;
76-
pow *= 10;
55+
const writer = this.writer;
56+
if (length < 100) {
57+
if (length < 10) {
58+
writer.u8(length + 48);
59+
return;
7760
}
61+
const octet1 = length % 10;
62+
const octet2 = (length - octet1) / 10;
63+
writer.u16(((octet2 + 48) << 8) + octet1 + 48);
64+
return;
65+
}
66+
let digits = 1;
67+
let pow = 10;
68+
while (length >= pow) {
69+
digits++;
70+
pow *= 10;
7871
}
79-
const writer = this.writer;
8072
writer.ensureCapacity(digits);
8173
const uint8 = writer.uint8;
8274
const x = writer.x;

0 commit comments

Comments
 (0)