@@ -192,3 +192,130 @@ Bug reports and pull requests are welcome on GitHub at [github](https://github.c
192
192
## License
193
193
194
194
The gem is available as open source under the terms of the [ MIT License] ( https://opensource.org/licenses/MIT ) .
195
+
196
+ ## Benchmarks
197
+
198
+ ``` shell
199
+ ========= JSON string size: 463 KB =========
200
+ path :data, :search, :searchResult, :paginationV2, :maxPage; extracted values: [8, 8, 8, 8]
201
+ ruby 2.7.8p225 (2023-03-30 revision 1f4d455848) [x86_64-linux]
202
+ Warming up --------------------------------------
203
+ json 9.000 i/100ms
204
+ oj 18.000 i/100ms
205
+ json_scanner scan 70.000 i/100ms
206
+ json_scanner parse 74.000 i/100ms
207
+ Calculating -------------------------------------
208
+ json 93.566 (± 2.1%) i/s (10.69 ms/i) - 468.000 in 5.004734s
209
+ oj 188.098 (± 5.3%) i/s (5.32 ms/i) - 954.000 in 5.088179s
210
+ json_scanner scan 740.777 (± 3.1%) i/s (1.35 ms/i) - 3.710k in 5.013415s
211
+ json_scanner parse 738.147 (± 2.2%) i/s (1.35 ms/i) - 3.700k in 5.014863s
212
+
213
+ Comparison:
214
+ json_scanner scan: 740.8 i/s
215
+ json_scanner parse: 738.1 i/s - same-ish: difference falls within error
216
+ oj: 188.1 i/s - 3.94x slower
217
+ json: 93.6 i/s - 7.92x slower
218
+
219
+ Calculating -------------------------------------
220
+ json 1.987M memsize ( 0.000 retained)
221
+ 26.302k objects ( 0.000 retained)
222
+ 50.000 strings ( 0.000 retained)
223
+ oj 1.379M memsize ( 0.000 retained)
224
+ 9.665k objects ( 0.000 retained)
225
+ 50.000 strings ( 0.000 retained)
226
+ json_scanner scan 368.000 memsize ( 0.000 retained)
227
+ 6.000 objects ( 0.000 retained)
228
+ 1.000 strings ( 0.000 retained)
229
+ json_scanner parse 2.240k memsize ( 528.000 retained)
230
+ 23.000 objects ( 9.000 retained)
231
+ 1.000 strings ( 0.000 retained)
232
+
233
+ Comparison:
234
+ json_scanner scan: 368 allocated
235
+ json_scanner parse: 2240 allocated - 6.09x more
236
+ oj: 1379274 allocated - 3748.03x more
237
+ json: 1987269 allocated - 5400.19x more
238
+ ============================================
239
+
240
+ ========= JSON string size: 463 KB =========
241
+ path :data, :search, :searchResult, :paginationV2, :maxPage; extracted values: [8, 8, 8, 8]
242
+ ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
243
+ Warming up --------------------------------------
244
+ json 15.000 i/100ms
245
+ oj 17.000 i/100ms
246
+ json_scanner scan 74.000 i/100ms
247
+ json_scanner parse 73.000 i/100ms
248
+ Calculating -------------------------------------
249
+ json 156.015 (± 4.5%) i/s (6.41 ms/i) - 780.000 in 5.009398s
250
+ oj 146.395 (±19.1%) i/s (6.83 ms/i) - 714.000 in 5.085658s
251
+ json_scanner scan 513.451 (±29.4%) i/s (1.95 ms/i) - 2.368k in 5.046488s
252
+ json_scanner parse 640.176 (±16.2%) i/s (1.56 ms/i) - 3.139k in 5.067958s
253
+
254
+ Comparison:
255
+ json_scanner parse: 640.2 i/s
256
+ json_scanner scan: 513.5 i/s - same-ish: difference falls within error
257
+ json: 156.0 i/s - 4.10x slower
258
+ oj: 146.4 i/s - 4.37x slower
259
+
260
+ Calculating -------------------------------------
261
+ json 1.402M memsize ( 0.000 retained)
262
+ 10.184k objects ( 0.000 retained)
263
+ 50.000 strings ( 0.000 retained)
264
+ oj 1.441M memsize ( 168.000 retained)
265
+ 9.665k objects ( 1.000 retained)
266
+ 50.000 strings ( 0.000 retained)
267
+ json_scanner scan 368.000 memsize ( 0.000 retained)
268
+ 6.000 objects ( 0.000 retained)
269
+ 1.000 strings ( 0.000 retained)
270
+ json_scanner parse 2.072k memsize ( 360.000 retained)
271
+ 22.000 objects ( 8.000 retained)
272
+ 1.000 strings ( 0.000 retained)
273
+
274
+ Comparison:
275
+ json_scanner scan: 368 allocated
276
+ json_scanner parse: 2072 allocated - 5.63x more
277
+ json: 1401815 allocated - 3809.28x more
278
+ oj: 1440774 allocated - 3915.15x more
279
+ ============================================
280
+
281
+ ========= JSON string size: 463 KB =========
282
+ path :data, :search, :searchResult, :paginationV2, :maxPage; extracted values: [8, 8, 8, 8]
283
+ ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
284
+ Warming up --------------------------------------
285
+ json 11.000 i/100ms
286
+ oj 12.000 i/100ms
287
+ json_scanner scan 68.000 i/100ms
288
+ json_scanner parse 75.000 i/100ms
289
+ Calculating -------------------------------------
290
+ json 153.145 (± 9.1%) i/s (6.53 ms/i) - 759.000 in 5.003997s
291
+ oj 161.947 (± 3.7%) i/s (6.17 ms/i) - 816.000 in 5.045710s
292
+ json_scanner scan 733.917 (± 1.9%) i/s (1.36 ms/i) - 3.672k in 5.005395s
293
+ json_scanner parse 719.953 (± 2.1%) i/s (1.39 ms/i) - 3.600k in 5.002508s
294
+
295
+ Comparison:
296
+ json_scanner scan: 733.9 i/s
297
+ json_scanner parse: 720.0 i/s - same-ish: difference falls within error
298
+ oj: 161.9 i/s - 4.53x slower
299
+ json: 153.1 i/s - 4.79x slower
300
+
301
+ Calculating -------------------------------------
302
+ json 1.377M memsize ( 0.000 retained)
303
+ 10.184k objects ( 0.000 retained)
304
+ 50.000 strings ( 0.000 retained)
305
+ oj 1.363M memsize ( 0.000 retained)
306
+ 9.665k objects ( 0.000 retained)
307
+ 50.000 strings ( 0.000 retained)
308
+ json_scanner scan 360.000 memsize ( 0.000 retained)
309
+ 6.000 objects ( 0.000 retained)
310
+ 1.000 strings ( 0.000 retained)
311
+ json_scanner parse 2.000k memsize ( 360.000 retained)
312
+ 22.000 objects ( 8.000 retained)
313
+ 1.000 strings ( 0.000 retained)
314
+
315
+ Comparison:
316
+ json_scanner scan: 360 allocated
317
+ json_scanner parse: 2000 allocated - 5.56x more
318
+ oj: 1363382 allocated - 3787.17x more
319
+ json: 1376519 allocated - 3823.66x more
320
+ ============================================
321
+ ```
0 commit comments