Spaces:
Runtime error
Runtime error
| # fast-querystring | |
|  | |
| [](https://codecov.io/gh/anonrig/fast-querystring) | |
| [](https://www.npmjs.com/package/fast-querystring) | |
| Fast query-string parser and stringifier to replace the legacy `node:querystring` module. | |
| ### Installation | |
| ``` | |
| npm i fast-querystring | |
| ``` | |
| ### Features | |
| - Supports both `parse` and `stringify` methods from `node:querystring` module | |
| - Parsed object does not have prototype methods | |
| - Uses `&` separator as default | |
| - Supports only input of type `string` | |
| - Supports repeating keys in query string | |
| - `foo=bar&foo=baz` parses into `{foo: ['bar', 'baz']}` | |
| - Supports pairs with missing values | |
| - `foo=bar&hola` parses into `{foo: 'bar', hola: ''}` | |
| - Stringify does not support nested values (just like `node:querystring`) | |
| ### Usage | |
| ```javascript | |
| const qs = require('fast-querystring') | |
| // Parsing a querystring | |
| console.log(qs.parse('hello=world&foo=bar&values=v1&values=v2')) | |
| // { | |
| // hello: 'world', | |
| // foo: 'bar', | |
| // values: ['v1', 'v2'] | |
| // } | |
| // Stringifying an object | |
| console.log(qs.stringify({ foo: ['bar', 'baz'] })) | |
| // 'foo=bar&foo=baz' | |
| ``` | |
| ### Benchmark | |
| All benchmarks are run using Node.js v20.2.0 running on M1 Max. | |
| - Parsing a query-string | |
| ``` | |
| > node benchmark/parse.mjs | |
| βββββββββββββββββββββββββββββββββββββββββββ€ββββββββββ€ββββββββββββββββββββ€ββββββββββββ | |
| β Slower tests β Samples β Result β Tolerance β | |
| βββββββββββββββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββββΌββββββββββββ’ | |
| β query-string β 10000 β 273968.62 op/sec β Β± 1.48 % β | |
| β qs β 9999 β 324118.68 op/sec β Β± 0.99 % β | |
| β querystringify β 1000 β 410157.64 op/sec β Β± 0.68 % β | |
| β @aws-sdk/querystring-parser β 1000 β 431465.20 op/sec β Β± 0.83 % β | |
| β URLSearchParams-with-Object.fromEntries β 5000 β 833939.19 op/sec β Β± 0.97 % β | |
| β URLSearchParams-with-construct β 10000 β 980017.92 op/sec β Β± 2.42 % β | |
| β node:querystring β 10000 β 1068165.86 op/sec β Β± 3.41 % β | |
| β querystringparser β 3000 β 1384001.31 op/sec β Β± 0.95 % β | |
| βββββββββββββββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββββΌββββββββββββ’ | |
| β Fastest test β Samples β Result β Tolerance β | |
| βββββββββββββββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββββΌββββββββββββ’ | |
| β fast-querystring β 10000 β 1584458.62 op/sec β Β± 2.64 % β | |
| βββββββββββββββββββββββββββββββββββββββββββ§ββββββββββ§ββββββββββββββββββββ§ββββββββββββ | |
| ``` | |
| - Stringify a query-string | |
| ``` | |
| > node benchmark/stringify.mjs | |
| ββββββββββββββββββββββββββββββββ€ββββββββββ€ββββββββββββββββββββ€ββββββββββββ | |
| β Slower tests β Samples β Result β Tolerance β | |
| ββββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββββΌββββββββββββ’ | |
| β query-string β 10000 β 314662.25 op/sec β Β± 1.08 % β | |
| β qs β 9500 β 353621.74 op/sec β Β± 0.98 % β | |
| β http-querystring-stringify β 10000 β 372189.04 op/sec β Β± 1.48 % β | |
| β @aws-sdk/querystring-builder β 10000 β 411658.63 op/sec β Β± 1.67 % β | |
| β URLSearchParams β 10000 β 454438.85 op/sec β Β± 1.32 % β | |
| β querystringparser β 10000 β 455615.18 op/sec β Β± 4.22 % β | |
| β querystringify β 10000 β 879020.96 op/sec β Β± 2.12 % β | |
| β querystringify-ts β 10000 β 879134.48 op/sec β Β± 2.19 % β | |
| β node:querystring β 10000 β 1244505.97 op/sec β Β± 2.12 % β | |
| ββββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββββΌββββββββββββ’ | |
| β Fastest test β Samples β Result β Tolerance β | |
| ββββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββββΌββββββββββββ’ | |
| β fast-querystring β 10000 β 1953717.60 op/sec β Β± 3.16 % β | |
| ββββββββββββββββββββββββββββββββ§ββββββββββ§ββββββββββββββββββββ§ββββββββββββ | |
| ``` | |
| - Importing package. | |
| ``` | |
| > node benchmark/import.mjs | |
| βββββββββββββββββββββββββββββββ€ββββββββββ€ββββββββββββββββββ€ββββββββββββ | |
| β Slower tests β Samples β Result β Tolerance β | |
| βββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββΌββββββββββββ’ | |
| β @aws-sdk/querystring-parser β 1000 β 12360.51 op/sec β Β± 0.57 % β | |
| β qs β 1000 β 14507.74 op/sec β Β± 0.36 % β | |
| β querystringify β 1000 β 14750.53 op/sec β Β± 0.39 % β | |
| β query-string β 1000 β 16335.05 op/sec β Β± 0.87 % β | |
| β querystringparser β 1000 β 17018.50 op/sec β Β± 0.42 % β | |
| βββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββΌββββββββββββ’ | |
| β Fastest test β Samples β Result β Tolerance β | |
| βββββββββββββββββββββββββββββββΌββββββββββΌββββββββββββββββββΌββββββββββββ’ | |
| β fast-querystring β 2500 β 74605.83 op/sec β Β± 0.91 % β | |
| βββββββββββββββββββββββββββββββ§ββββββββββ§ββββββββββββββββββ§ββββββββββββ | |
| ``` | |