- Notifications
You must be signed in to change notification settings - Fork30
Node.js bindings for the simdjson project: "Parsing gigabytes of JSON per second"
License
luizperes/simdjson_nodejs
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Node.js bindings forsimdjson, a gigabytes-per-second JSON parser, possibly the fastest JSON parser at the moment.simdjson as well assimdjson_nodejs work on popular platforms such as OS X, Linux, and Windows.
The installation can be done in one step withnpm:
npm install simdjson
Seeindex.d.ts for availablesimdjson binding functions and their input/output types.
constsimdjson=require('simdjson');constjsonString="{ \"answer\": 42 }";constvalid=simdjson.isValid(jsonString);// true
Obs.: Please see that the overhead of converting a C++ object to a JS object might make the parsing time in the NodeJS slower for the simdjson. Therefore, parsing it lazily is preferrable. For more information check issue #5.
constsimdjson=require('simdjson');constjsonString="{ \ \"foo\": { \ \"bar\": [ 0, 42 ] \ } \}";constJSONbuffer=simdjson.lazyParse(jsonString);// external (C++) parsed JSON objectconsole.log(JSONbuffer.valueForKeyPath("foo.bar[1]"));// 42
Obs.: Parsing a JSON lazily is preferrable.
constsimdjson=require('simdjson');constjsonString="{ \ \"foo\": { \ \"bar\": [ 0, 42 ] \ } \}";constparsedJSON=simdjson.parse(jsonString);// parsed JSON object
Requirements: git, npm, node, a linux-like system, a recent compiler (GCC,clang)
To benchmark directly from the project:
git clone https://github.com/luizperes/simdjson_nodejs.gitcd simdjson_nodejsnpm installnpm run benchmark| filename | filesize (MB) | JSON.parse(ms) | simdjson.lazyParse (ms) | JSON.parse (GB/s) | simdjson.lazyParse (GB/s) | X faster |
|---|---|---|---|---|---|---|
| apache_builds.json | 0.13 | 0.303 | 0.158 | 0.42 | 0.80 | 1.91 |
| canada.json | 2.25 | 14.332 | 7.584 | 0.16 | 0.30 | 1.89 |
| citm_catalog.json | 1.73 | 5.387 | 5.768 | 0.32 | 0.30 | 0.93 |
| github_events.json | 0.07 | 0.192 | 0.091 | 0.34 | 0.71 | 2.10 |
| gsoc_2018.json | 3.33 | 5.420 | 3.839 | 0.61 | 0.87 | 1.41 |
| instruments.json | 0.22 | 0.673 | 0.619 | 0.33 | 0.36 | 1.09 |
| marine_ik.json | 2.98 | 13.169 | 6.397 | 0.23 | 0.47 | 2.06 |
| mesh_pretty.json | 1.58 | 5.704 | 3.043 | 0.28 | 0.52 | 1.87 |
| mesh.json | 0.72 | 2.856 | 1.404 | 0.25 | 0.52 | 2.03 |
| numbers.json | 0.15 | 0.643 | 0.280 | 0.23 | 0.54 | 2.30 |
| random.json | 0.51 | 1.914 | 2.447 | 0.27 | 0.21 | 0.78 |
| sf_citylots.json | 189.78 | 1492.166 | 709.692 | 0.13 | 0.27 | 2.10 |
| twitter.json | 0.63 | 1.621 | 2.112 | 0.39 | 0.30 | 0.77 |
| twitterescaped.json | 0.56 | 1.924 | 0.959 | 0.29 | 0.59 | 2.01 |
| update_center.json | 0.53 | 2.803 | 2.715 | 0.19 | 0.20 | 1.03 |
Results from a 2018 MacBook Pro with 2.3GHz Intel Core i9.
apache_builds.json#simdjson x 6,844 ops/sec ±1.61% (90 runs sampled) => 0.146msapache_builds.json#JSON x 3,274 ops/sec ±1.83% (90 runs sampled) => 0.305mscanada.json#simdjson x 183 ops/sec ±7.69% (72 runs sampled) => 5.475mscanada.json#JSON x 71.87 ops/sec ±0.92% (74 runs sampled) => 13.914mscitm_catalog.json#simdjson x 155 ops/sec ±2.95% (72 runs sampled) => 6.470mscitm_catalog.json#JSON x 207 ops/sec ±59.63% (90 runs sampled) => 4.820msgithub_events.json#simdjson x 11,783 ops/sec ±1.80% (90 runs sampled) => 0.085msgithub_events.json#JSON x 120 ops/sec ±192.65% (92 runs sampled) => 8.310msgsoc_2018.json#simdjson x 307 ops/sec ±1.81% (79 runs sampled) => 3.255msgsoc_2018.json#JSON x 166 ops/sec ±47.75% (81 runs sampled) => 6.029msinstruments.json#simdjson x 3,691 ops/sec ±2.06% (87 runs sampled) => 0.271msinstruments.json#JSON x 2,155 ops/sec ±0.83% (93 runs sampled) => 0.464msmarine_ik.json#simdjson x 140 ops/sec ±3.08% (73 runs sampled) => 7.133msmarine_ik.json#JSON x 51.20 ops/sec ±60.81% (76 runs sampled) => 19.533msmesh_pretty.json#simdjson x 504 ops/sec ±1.93% (87 runs sampled) => 1.985msmesh_pretty.json#JSON x 251 ops/sec ±1.02% (85 runs sampled) => 3.987msmesh.json#simdjson x 733 ops/sec ±0.99% (92 runs sampled) => 1.363msmesh.json#JSON x 349 ops/sec ±0.64% (89 runs sampled) => 2.869msnumbers.json#simdjson x 4,099 ops/sec ±1.10% (94 runs sampled) => 0.244msnumbers.json#JSON x 1,372 ops/sec ±38.74% (95 runs sampled) => 0.729msrandom.json#simdjson x 504 ops/sec ±0.97% (91 runs sampled) => 1.983msrandom.json#JSON x 538 ops/sec ±0.93% (91 runs sampled) => 1.859mssf_citylots.json#simdjson x 1.76 ops/sec ±4.02% (9 runs sampled) => 569.580mssf_citylots.json#JSON x 0.53 ops/sec ±20.38% (6 runs sampled) => 1880.563mstwitter.json#simdjson x 478 ops/sec ±0.68% (89 runs sampled) => 2.093mstwitter.json#JSON x 612 ops/sec ±0.90% (91 runs sampled) => 1.633mstwitterescaped.json#simdjson x 1,203 ops/sec ±1.80% (88 runs sampled) => 0.831mstwitterescaped.json#JSON x 488 ops/sec ±2.33% (82 runs sampled) => 2.051msupdate_center.json#simdjson x 469 ops/sec ±3.43% (85 runs sampled) => 2.132msupdate_center.json#JSON x 293 ops/sec ±12.87% (57 runs sampled) => 3.410msPlease refer to the the original repository benchmarks for more information about the performance ofsimdjsonhttps://github.com/lemire/simdjson.
About
Node.js bindings for the simdjson project: "Parsing gigabytes of JSON per second"
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors8
Uh oh!
There was an error while loading.Please reload this page.