@@ -62,6 +62,60 @@ const message = capnp.Message.fromArrayBuffer(buffer);
62
62
const struct = message .getRoot (MyStruct );
63
63
```
64
64
65
+ ## Benchmarks
66
+
67
+ In theory, since capnp does not needs any serialization and deserialization, it is INFINITY TIMES faster than any other protocol as "parse" only happens on field access.
68
+
69
+ To be more fair, we [ benchmark] ( ./test//benchmark ) by accessing fields in different ways. It is still up to ** %65** faster even on a small JSON payload than ` JSON.parse ` .
70
+
71
+ <details >
72
+
73
+ <summary >results</summary >
74
+
75
+ ```
76
+ $ node --import jiti/register ./test/benchmark/bench.ts
77
+
78
+ cpu: Apple M2
79
+ runtime: node v20.15.1 (arm64-darwin)
80
+
81
+ benchmark time (avg) (min … max) p75 p99 p999
82
+ ------------------------------------------------------------------------------ -----------------------------
83
+ • iteration over deeply nested lists
84
+ ------------------------------------------------------------------------------ -----------------------------
85
+ capnp.Message(<buff>) 1'357 ns/iter (1'119 ns … 2'546 ns) 1'451 ns 1'685 ns 2'546 ns
86
+ JSON.parse(<string>) 1'990 ns/iter (1'911 ns … 2'368 ns) 2'003 ns 2'150 ns 2'368 ns
87
+ JSON.parse(TextDecoder.decode(<buff>)) 2'166 ns/iter (2'130 ns … 2'548 ns) 2'171 ns 2'544 ns 2'548 ns
88
+
89
+ summary for iteration over deeply nested lists
90
+ capnp.Message(<buff>)
91
+ 1.47x faster than JSON.parse(<string>)
92
+ 1.6x faster than JSON.parse(TextDecoder.decode(<buff>))
93
+
94
+ • top level list length access
95
+ ------------------------------------------------------------------------------ -----------------------------
96
+ capnp.Message(<buff>) 1'662 ns/iter (1'340 ns … 2'293 ns) 1'794 ns 2'263 ns 2'293 ns
97
+ JSON.parse(<string>) 2'156 ns/iter (2'100 ns … 2'620 ns) 2'157 ns 2'378 ns 2'620 ns
98
+ JSON.parse(TextDecoder.decode(<buff>)) 2'291 ns/iter (2'240 ns … 2'492 ns) 2'311 ns 2'454 ns 2'492 ns
99
+
100
+ summary for top level list length access
101
+ capnp.Message(<buff>)
102
+ 1.3x faster than JSON.parse(<string>)
103
+ 1.38x faster than JSON.parse(TextDecoder.decode(<buff>))
104
+
105
+ • parse
106
+ ------------------------------------------------------------------------------ -----------------------------
107
+ capnp.Message(<buff>).getRoot() 1'328 ns/iter (1'110 ns … 1'710 ns) 1'456 ns 1'688 ns 1'710 ns
108
+ JSON.parse(<string>) 2'043 ns/iter (1'982 ns … 2'222 ns) 2'107 ns 2'213 ns 2'222 ns
109
+ JSON.parse(TextDecoder.decode(<buff>)) 2'190 ns/iter (2'111 ns … 2'349 ns) 2'264 ns 2'338 ns 2'349 ns
110
+
111
+ summary for parse
112
+ capnp.Message(<buff>).getRoot()
113
+ 1.54x faster than JSON.parse(<string>)
114
+ 1.65x faster than JSON.parse(TextDecoder.decode(<buff>))
115
+ ```
116
+
117
+ </details >
118
+
65
119
## Development
66
120
67
121
<details >
0 commit comments