rvagg / cborg

fast CBOR with a focus on strictness
Other
47 stars 13 forks source link

perf: faster utf8ToBytes #94

Closed alanshaw closed 1 year ago

alanshaw commented 1 year ago

The google closure library code seems to be a bit faster (at least in Node.js 20) when encoding strings. Here's the benchmark results:

Before:

rnd-100 @ 1,000
        encode (avg 87 b): cborg @ 501,786 op/s / borc @ 611,768 op/s = 82 %
        decode (avg 87 b): cborg @ 994,432 op/s / borc @ 785,126 op/s = 126.7 %
rnd-300 @ 1,000
        encode (avg 221 b): cborg @ 351,840 op/s / borc @ 418,766 op/s = 84 %
        decode (avg 221 b): cborg @ 639,305 op/s / borc @ 537,438 op/s = 119 %
rnd-nomap-300 @ 1,000
        encode (avg 174 b): cborg @ 595,479 op/s / borc @ 953,550 op/s = 62.4 %
        decode (avg 174 b): cborg @ 1,031,100 op/s / borc @ 796,402 op/s = 129.5 %
rnd-nolist-300 @ 1,000
        encode (avg 182 b): cborg @ 428,120 op/s / borc @ 468,517 op/s = 91.4 %
        decode (avg 182 b): cborg @ 701,533 op/s / borc @ 630,846 op/s = 111.2 %
rnd-nofloat-300 @ 1,000
        encode (avg 238 b): cborg @ 382,259 op/s / borc @ 441,217 op/s = 86.6 %
        decode (avg 238 b): cborg @ 598,776 op/s / borc @ 548,000 op/s = 109.3 %
rnd-nomaj7-300 @ 1,000
        encode (avg 289 b): cborg @ 347,182 op/s / borc @ 396,923 op/s = 87.5 %
        decode (avg 289 b): cborg @ 537,736 op/s / borc @ 470,637 op/s = 114.3 %
rnd-nostr-300 @ 1,000
        encode (avg 162 b): cborg @ 197,778 op/s / borc @ 218,994 op/s = 90.3 %
        decode (avg 162 b): cborg @ 425,106 op/s / borc @ 390,528 op/s = 108.9 %
rnd-nostrbyts-300 @ 1,000
        encode (avg 212 b): cborg @ 291,952 op/s / borc @ 330,116 op/s = 88.4 %
        decode (avg 212 b): cborg @ 529,095 op/s / borc @ 414,904 op/s = 127.5 %
rnd-1000 @ 1,000
        encode (avg 650 b): cborg @ 253,876 op/s / borc @ 294,910 op/s = 86.1 %
        decode (avg 650 b): cborg @ 369,990 op/s / borc @ 346,720 op/s = 106.7 %
rnd-2000 @ 1,000
        encode (avg 1,297 b): cborg @ 191,292 op/s / borc @ 223,832 op/s = 85.5 %
        decode (avg 1,297 b): cborg @ 256,627 op/s / borc @ 248,979 op/s = 103.1 %
rnd-fil-100 @ 1,000
        encode (avg 71 b): cborg @ 832,995 op/s / borc @ 1,318,347 op/s = 63.2 %
        decode (avg 71 b): cborg @ 1,636,137 op/s / borc @ 1,073,745 op/s = 152.4 %
rnd-fil-300 @ 1,000
        encode (avg 186 b): cborg @ 656,655 op/s / borc @ 984,984 op/s = 66.7 %
        decode (avg 186 b): cborg @ 1,058,784 op/s / borc @ 757,680 op/s = 139.7 %
rnd-fil-500 @ 1,000
        encode (avg 291 b): cborg @ 607,246 op/s / borc @ 871,309 op/s = 69.7 %
        decode (avg 291 b): cborg @ 824,826 op/s / borc @ 666,586 op/s = 123.7 %
rnd-fil-1000 @ 1,000
        encode (avg 566 b): cborg @ 482,090 op/s / borc @ 670,950 op/s = 71.9 %
        decode (avg 566 b): cborg @ 597,394 op/s / borc @ 511,910 op/s = 116.7 %
rnd-fil-2000 @ 1,000
        encode (avg 1,125 b): cborg @ 346,957 op/s / borc @ 459,618 op/s = 75.5 %
        decode (avg 1,125 b): cborg @ 392,427 op/s / borc @ 359,280 op/s = 109.2 %
Avg encode: 79 %
Avg decode: 120 %

After:

rnd-100 @ 1,000
        encode (avg 80 b): cborg @ 540,512 op/s / borc @ 650,748 op/s = 83.1 %
        decode (avg 80 b): cborg @ 1,033,018 op/s / borc @ 806,323 op/s = 128.1 %
rnd-300 @ 1,000
        encode (avg 219 b): cborg @ 354,415 op/s / borc @ 422,385 op/s = 83.9 %
        decode (avg 219 b): cborg @ 632,121 op/s / borc @ 526,282 op/s = 120.1 %
rnd-nomap-300 @ 1,000
        encode (avg 168 b): cborg @ 628,091 op/s / borc @ 996,870 op/s = 63 %
        decode (avg 168 b): cborg @ 1,114,323 op/s / borc @ 859,677 op/s = 129.6 %
rnd-nolist-300 @ 1,000
        encode (avg 184 b): cborg @ 433,350 op/s / borc @ 460,816 op/s = 94 %
        decode (avg 184 b): cborg @ 703,953 op/s / borc @ 629,173 op/s = 111.9 %
rnd-nofloat-300 @ 1,000
        encode (avg 241 b): cborg @ 374,985 op/s / borc @ 421,557 op/s = 89 %
        decode (avg 241 b): cborg @ 619,200 op/s / borc @ 519,800 op/s = 119.1 %
rnd-nomaj7-300 @ 1,000
        encode (avg 287 b): cborg @ 335,238 op/s / borc @ 374,065 op/s = 89.6 %
        decode (avg 287 b): cborg @ 543,035 op/s / borc @ 449,825 op/s = 120.7 %
rnd-nostr-300 @ 1,000
        encode (avg 160 b): cborg @ 201,186 op/s / borc @ 220,835 op/s = 91.1 %
        decode (avg 160 b): cborg @ 425,784 op/s / borc @ 409,674 op/s = 103.9 %
rnd-nostrbyts-300 @ 1,000
        encode (avg 221 b): cborg @ 270,657 op/s / borc @ 294,528 op/s = 91.9 %
        decode (avg 221 b): cborg @ 471,058 op/s / borc @ 390,426 op/s = 120.7 %
rnd-1000 @ 1,000
        encode (avg 666 b): cborg @ 248,493 op/s / borc @ 275,662 op/s = 90.1 %
        decode (avg 666 b): cborg @ 346,850 op/s / borc @ 331,985 op/s = 104.5 %
rnd-2000 @ 1,000
        encode (avg 1,335 b): cborg @ 179,015 op/s / borc @ 198,004 op/s = 90.4 %
        decode (avg 1,335 b): cborg @ 247,505 op/s / borc @ 247,008 op/s = 100.2 %
rnd-fil-100 @ 1,000
        encode (avg 70 b): cborg @ 832,064 op/s / borc @ 1,325,500 op/s = 62.8 %
        decode (avg 70 b): cborg @ 1,631,088 op/s / borc @ 1,098,960 op/s = 148.4 %
rnd-fil-300 @ 1,000
        encode (avg 178 b): cborg @ 693,451 op/s / borc @ 1,031,356 op/s = 67.2 %
        decode (avg 178 b): cborg @ 1,126,998 op/s / borc @ 860,778 op/s = 130.9 %
rnd-fil-500 @ 1,000
        encode (avg 304 b): cborg @ 560,052 op/s / borc @ 802,534 op/s = 69.8 %
        decode (avg 304 b): cborg @ 878,805 op/s / borc @ 690,438 op/s = 127.3 %
rnd-fil-1000 @ 1,000
        encode (avg 582 b): cborg @ 465,134 op/s / borc @ 647,053 op/s = 71.9 %
        decode (avg 582 b): cborg @ 594,212 op/s / borc @ 504,974 op/s = 117.7 %
rnd-fil-2000 @ 1,000
        encode (avg 1,124 b): cborg @ 357,924 op/s / borc @ 468,591 op/s = 76.4 %
        decode (avg 1,124 b): cborg @ 400,198 op/s / borc @ 369,260 op/s = 108.4 %
Avg encode: 81 %
Avg decode: 119 %
github-actions[bot] commented 1 year ago

:tada: This PR is included in version 4.0.1 :tada:

The release is available on:

Your semantic-release bot :package::rocket: