Install dependencies first:
npm i
Then run benchmarks:
npm run bench:perf
npm run bench:size
On average BackPack lets one to shave off 20-30% from payload size.
Note
There's a catch with gzipping MessagePack/BackPack payloads though: in order to get good results the strategy should be set either to Z_RLE
or Z_HUFFMAN_ONLY
(the former works slightly better). Other strategies, including the default one, result in quite inefficient compression for these two formats, but it does wonders for JSON.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Average (all cases) β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 8.42 MB β 5.33 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +13.8% to MessagePack β +8.17% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +34.6% to BackPack β +30.89% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 7.26 MB β 4.89 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -13.8% to JSON β -8.17% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +24.14% to BackPack β +24.74% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 5.51 MB β 3.68 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -34.6% to JSON β -30.89% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -24.14% to MessagePack β -24.74% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Median (all cases) β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β JSON β 317.71 kB β 207.08 kB β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β +12.97% to MessagePack β +7.26% to MessagePack β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β +27.97% to BackPack β +23.49% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β MessagePack β 276.51 kB β 192.04 kB β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β -12.97% to JSON β -7.26% to JSON β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β +17.23% to BackPack β +17.5% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β BackPack β 228.86 kB β 158.44 kB β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β -27.97% to JSON β -23.49% to JSON β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β -17.23% to MessagePack β -17.5% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββ
Click to see more results with payloads of different size.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'one (1)' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β JSON β 2.31 kB β 1.53 kB β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β +13.94% to MessagePack β +6.51% to MessagePack β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β +11.11% to BackPack β -1.57% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β MessagePack β 1.99 kB β 1.43 kB β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β -13.94% to JSON β -6.51% to JSON β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β -3.18% to BackPack β -7.97% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β BackPack β 2.06 kB β 1.56 kB β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β -11.11% to JSON β +1.57% to JSON β
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββ€
β β +3.18% to MessagePack β +7.97% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'sm (100)' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 472.66 kB β 298.84 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +13.82% to MessagePack β +8.2% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +28.79% to BackPack β +24.3% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 407.32 kB β 274.35 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -13.82% to JSON β -8.2% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +17.37% to BackPack β +17.54% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 336.57 kB β 226.22 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -28.79% to JSON β -24.3% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -17.37% to MessagePack β -17.54% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'md (1,000)' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 4.51 MB β 2.85 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +13.82% to MessagePack β +8.19% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +34.04% to BackPack β +30.26% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 3.89 MB β 2.62 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -13.82% to JSON β -8.19% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +23.46% to BackPack β +24.04% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 2.98 MB β 1.99 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -34.04% to JSON β -30.26% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -23.46% to MessagePack β -24.04% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'lg (10,000)' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 45.23 MB β 28.60 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +13.83% to MessagePack β +8.2% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +34.78% to BackPack β +31.11% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 38.98 MB β 26.26 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -13.83% to JSON β -8.2% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +24.32% to BackPack β +24.96% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 29.50 MB β 19.70 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -34.78% to JSON β -31.11% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -24.32% to MessagePack β -24.96% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'lg (100,000)' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 453.73 MB β 286.88 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +13.82% to MessagePack β +8.2% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +35.16% to BackPack β +31.54% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 391.01 MB β 263.37 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -13.82% to JSON β -8.2% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +24.76% to BackPack β +25.43% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 294.18 MB β 196.40 MB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -35.16% to JSON β -31.54% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -24.76% to MessagePack β -25.43% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'rust-lang repositories list' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 154.68 kB β 94.31 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +8.05% to MessagePack β +3.62% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +21.67% to BackPack β +15.47% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 142.23 kB β 90.89 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -8.05% to JSON β -3.62% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +14.81% to BackPack β +12.29% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 121.16 kB β 79.72 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -21.67% to JSON β -15.47% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -14.81% to MessagePack β -12.29% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Case 'npm meta for @nrsk/sigma' β
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Format β Normal β Gzipped β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β JSON β 162.77 kB β 115.32 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +10.49% to MessagePack β +4.85% to MessagePack β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +28.85% to BackPack β +21.39% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β MessagePack β 145.70 kB β 109.73 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -10.49% to JSON β -4.85% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β +20.52% to BackPack β +17.38% to BackPack β
βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β BackPack β 115.81 kB β 90.66 kB β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -28.85% to JSON β -21.39% to JSON β
β ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β -20.52% to MessagePack β -17.38% to MessagePack β
βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
It's not fast, but not slow either, and performs mostly on par with the official implementation.
Running "Serialize" suite...
Progress: 100%
BackPack: 765 ops/s, Β±0.62% | 48.45% slower
MessagePack (@msgpack/msgpack): 647 ops/s, Β±0.89% | slowest, 56.4% slower
MessagePack (msgpackr): 994 ops/s, Β±1.30% | 33.02% slower
JSON.stringify: 1 484 ops/s, Β±0.78% | fastest
Running "Deserialize" suite...
Progress: 100%
BackPack: 479 ops/s, Β±0.63% | slowest, 59.02% slower
MessagePack (@msgpack/msgpack): 486 ops/s, Β±0.59% | 58.43% slower
MessagePack (msgpackr): 1 014 ops/s, Β±0.92% | 13.26% slower
JSON.parse: 1 169 ops/s, Β±0.78% | fastest