JavaScript (Node.js) — Benchmark Results
Generated: 2026-07-11T10:57:31.981210
Published local snapshot (not regenerated by GitHub Actions). Numbers may differ if you re-run benchmarks on another machine.
Serializer inventory and caveats: JavaScript (Node.js) overview. Methods: Analysis Methodology. Metric definitions & importance tiers: Metrics catalog.
Pivot tables
Multi-way leaderboards emphasize high-importance metrics (configurable via metrics.multi_way in master config). Harness modes (CSV StringOrStream): bytes mode = in-memory buffer API; stream mode = write/read through a stream-like path. These names are not payload sizes. In each table, rows are sorted by serializer name; bold marks the semantic best value in that column (lowest time; highest ops/s). Ties are all bolded. Latency tables are in microseconds (µs). Batch fixtures show as Type · N instances (from DataTypeInstanceCount; e.g. Message · 100 instances).
Summary
Default multi-serializer view shows high-importance metrics only (METRICS.md). Rows are sorted by serializer name. Bold marks the semantic best value in each column (lowest latency / size; highest ops/s). Pairwise / version A/B reports use the full metric set. Latency cells are µs (analysis storage remains ns).
| serializer | Median total (µs) | Median ser (µs) | Median deser (µs) | Ops/s (from mean) | Median size (B) | Samples | Fidelity |
|---|---|---|---|---|---|---|---|
| @msgpack/msgpack:3.1.3 | 131 | 63.6 | 66.7 | 91.3K | 13.5K | 1693 | 1.00 |
| avsc:5.7.9 | 335 | 181 | 153 | 69.9K | 9.02K | 1661 | 1.00 |
| bebop:3.2.3 | 133 | 48.2 | 84.2 | 125K | 19K | 1742 | 1.00 |
| bser:2.1.1 | 309 | 166 | 142 | 45.6K | 16.4K | 1705 | 1.00 |
| bson:6.10.4 | 186 | 89 | 96.6 | 81.2K | 20.3K | 1632 | 1.00 |
| cbor:9.0.2 | 1,140 | 479 | 660 | 14.4K | 13.6K | 1662 | 1.00 |
| cbor-x:1.6.4 | 73.1 | 43.4 | 29.6 | 125K | 10.3K | 1675 | 1.00 |
| devalue:5.8.1 | 426 | 314 | 110 | 37.3K | 25.6K | 1699 | 1.00 |
| fast-json-stringify:6.4.0 | 144 | 87.1 | 56.3 | 152K | 19.7K | 1692 | 1.00 |
| flatbuffers:24.12.23 | 149 | 86.3 | 62.4 | 102K | 19.1K | 1684 | 1.00 |
| flexbuffers:24.12.23 | 2,040 | 1,180 | 855 | 4.11K | 27.2K | 1588 | 1.00 |
| json-pack-msgpack:18.28.0 | 87.3 | 45.6 | 41.8 | 214K | 14.1K | 1720 | 1.00 |
| JSON.stringify:node-24.15.0 | 126 | 64.9 | 60.9 | 203K | 19.7K | 1687 | 1.00 |
| msgpackr:1.12.1 | 102 | 43.2 | 58.5 | 177K | 13.9K | 1667 | 1.00 |
| protobuf-es:2.12.1 | 74.7 | 14 | 60.5 | 100K | 19.7K | 1667 | 1.00 |
| protobufjs:7.6.5 | 60.6 | 4.75 | 55.9 | 247K | 19.7K | 1667 | 1.00 |
| sia:2.3.0 | 477 | 326 | 149 | 53.9K | 19K | 1665 | 1.00 |
| simdjson-parse+JSON.stringify:0.9.2 | 235 | 58.4 | 176 | 80.7K | 19.7K | 1723 | 1.00 |
| v8-serializer:v8-13.6.233.17-node.48 | 100 | 32 | 68.4 | 158K | 15.3K | 1716 | 1.00 |
Total Time
| serializer | bytes mode/mean | bytes mode/median | stream mode/mean | stream mode/median |
|---|---|---|---|---|
| @msgpack/msgpack:3.1.3 | 11.4 | 10.7 | 4.88 | 4.85 |
| avsc:5.7.9 | 6.46 | 6.41 | 4.77 | 4.76 |
| bebop:3.2.3 | 6.05 | 4.84 | 3.67 | 3.62 |
| bser:2.1.1 | 22.2 | 20.9 | 16 | 16 |
| bson:6.10.4 | 9.98 | 9.17 | 6.45 | 5.92 |
| cbor:9.0.2 | 59.6 | 50.3 | 42.3 | 42.7 |
| cbor-x:1.6.4 | 9.2 | 9.1 | 4.1 | 4.33 |
| devalue:5.8.1 | 9.34 | 9.2 | 5.8 | 5.17 |
| fast-json-stringify:6.4.0 | 4.41 | 4.13 | 2.98 | 3.14 |
| flatbuffers:24.12.23 | 9.93 | 9.31 | 6.41 | 6.36 |
| flexbuffers:24.12.23 | 49.8 | 48.7 | 201 | 294 |
| json-pack-msgpack:18.28.0 | 5.92 | 5.95 | 3.39 | 3 |
| JSON.stringify:node-24.15.0 | 2.15 | 2.06 | 1.97 | 1.95 |
| msgpackr:1.12.1 | 9.9 | 9.64 | 5.24 | 4.88 |
| protobuf-es:2.12.1 | 8.1 | 8 | 6.75 | 6.84 |
| protobufjs:7.6.5 | 2.5 | 2.34 | 2.28 | 2.26 |
| sia:2.3.0 | 10.2 | 10.8 | 7.81 | 7.53 |
| simdjson-parse+JSON.stringify:0.9.2 | 4.37 | 4.38 | 4.12 | 4.08 |
| v8-serializer:v8-13.6.233.17-node.48 | 2.23 | 2.18 | 2.91 | 3.06 |
Ops/Sec
| serializer | Document · 1 instance | Document · 100 instances | Event · 1 instance | Event · 100 instances | Message · 1 instance | Message · 100 instances | Strings · 1 instance | Strings · 100 instances | Telemetry · 1 instance | Telemetry · 100 instances |
|---|---|---|---|---|---|---|---|---|---|---|
| @msgpack/msgpack:3.1.3 | 51K | 2.6K | 300K | 4.4K | 87K | 8.1K | 220K | 2.4K | 130K | 7K |
| avsc:5.7.9 | 110K | 1.4K | 170K | 2.1K | 150K | 5.1K | 130K | 1.1K | 79K | 0.95K |
| bebop:3.2.3 | 160K | 2.4K | 340K | 4.1K | 170K | 7.4K | 260K | 2.6K | 220K | 7.3K |
| bser:2.1.1 | 76K | 0.93K | 110K | 1.6K | 45K | 3.1K | 110K | 1.4K | 81K | 1.7K |
| bson:6.10.4 | 45K | 1.5K | 240K | 2.9K | 100K | 5.6K | 180K | 2.5K | 150K | 3.7K |
| cbor:9.0.2 | 19K | 0.24K | 35K | 0.5K | 17K | 0.97K | 34K | 0.48K | 33K | 0.48K |
| cbor-x:1.6.4 | 88K | 5.6K | 240K | 7.4K | 110K | 22K | 66K | 3.8K | 440K | 9.1K |
| devalue:5.8.1 | 38K | 0.78K | 84K | 1.5K | 110K | 3.4K | 52K | 1.1K | 50K | 0.93K |
| fast-json-stringify:6.4.0 | 250K | 2.9K | 340K | 4.8K | 230K | 5.7K | 410K | 4.4K | 190K | 2K |
| flatbuffers:24.12.23 | 210K | 3.3K | 270K | 4.8K | 100K | 4.1K | 250K | 3.7K | 140K | 2K |
| flexbuffers:24.12.23 | 7.6K | 0.19K | 3.9K | 0.49K | 20K | 0.81K | 8.3K | 0.25K | 4.9K | 0.14K |
| json-pack-msgpack:18.28.0 | 92K | 3.5K | 630K | 6.7K | 170K | 12K | 460K | 3.7K | 670K | 8.8K |
| JSON.stringify:node-24.15.0 | 310K | 3.2K | 520K | 6.5K | 460K | 12K | 460K | 3.6K | 230K | 2.3K |
| msgpackr:1.12.1 | 89K | 2.7K | 400K | 5.2K | 100K | 10K | 500K | 4.3K | 540K | 7.9K |
| protobuf-es:2.12.1 | 160K | 4K | 230K | 8.8K | 120K | 19K | 230K | 6.5K | 200K | 5.9K |
| protobufjs:7.6.5 | 330K | 5.6K | 620K | 10K | 400K | 25K | 580K | 7.5K | 470K | 6.9K |
| sia:2.3.0 | 58K | 0.63K | 110K | 1.1K | 98K | 2.4K | 82K | 0.81K | 130K | 2.7K |
| simdjson-parse+JSON.stringify:0.9.2 | 120K | 1.5K | 170K | 3K | 230K | 5.9K | 150K | 2.2K | 110K | 1.4K |
| v8-serializer:v8-13.6.233.17-node.48 | 110K | 2.7K | 290K | 4.8K | 450K | 16K | 370K | 5.6K | 340K | 7.1K |
Latency distributions
Each figure pairs mean bars (left: ser / deser mean µs, linear from 0) with split violins (right: full sample density, linear from 0). Top 5 serializers by mean total time per fixture (display only; tables list all). Provenance (fixture, CSV path, modes, n) is printed on each image.
Document · 1 instance

Document · 100 instances

Event · 1 instance

Event · 100 instances

Message · 1 instance

Message · 100 instances

Strings · 1 instance

Strings · 100 instances

Telemetry · 1 instance

Telemetry · 100 instances

Regenerate
Published snapshots are produced locally (not by GitHub Actions). After running benchmarks (each run creates a timestamped YYYY-MM-DD-HHMMSS.csv):
analyze-benchmarks # all languages
analyze-benchmarks -l javascript # this language only
That refreshes this language's results tables and latency distributions under docs/analysis/plots/violin/. The hub Benchmark Results is a static index and is not rewritten. Commit the updated results.md / plot paths as needed.
Run configuration (important)
Show host, seed, serializers, and source CSV
Key fields from the run sidecar (*.configs.json, or legacy *.environment.json). Full metric definitions: Metrics catalog. Optional blocks (dataset, serializers) appear only when captured.
- Source CSV:
/home/leo/PycharmProjects/GLD/seriailizer-benchmark/logs/javascript/2026-07-10-162646.csv - run=2026-07-10-162646
- language=javascript
- os=Linux 6.8.0-124-generic
- cpu=12th Gen Intel(R) Core(TM) i7-12800H (20 threads)
- ram=31.0 GiB
- runtimes: node=24.15.0, python=3.14.0, dotnet=8.0.422
- git=995336e dirty
- seed=42
- warmup_reps=1
- serializers=19
- metrics_profile=multi_way
- Fixtures (config): message, document, telemetry, strings, event
- Serializers (from CSV):
@msgpack/msgpack@ 3.1.3JSON.stringify@ node-24.15.0avsc@ 5.7.9bebop@ 3.2.3bser@ 2.1.1bson@ 6.10.4cbor@ 9.0.2cbor-x@ 1.6.4devalue@ 5.8.1fast-json-stringify@ 6.4.0flatbuffers@ 24.12.23flexbuffers@ 24.12.23json-pack-msgpack@ 18.28.0msgpackr@ 1.12.1protobuf-es@ 2.12.1protobufjs@ 7.6.5sia@ 2.3.0simdjson-parse+JSON.stringify@ 0.9.2v8-serializer@ v8-13.6.233.17-node.48