Skip to content

Commit 212c51c

Browse files
committed
perf: update URLSearchParams benchmark to reflect real-world usage
1 parent 752d03a commit 212c51c

2 files changed

Lines changed: 46 additions & 17 deletions

File tree

README.md

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,17 @@ console.log(qs)
3838
> fast-querystring@0.1.0 benchmark
3939
> node test/benchmark.mjs
4040
41-
╔══════════════════╤═════════╤═══════════════════╤═══════════╤══════════════════════════╗
42-
║ Slower tests │ Samples │ Result │ Tolerance │ Difference with previous ║
43-
╟──────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
44-
║ qs │ 10000 │ 693377.51 op/sec │ ± 3.05 % │ ║
45-
║ query-string │ 10000 │ 719847.15 op/sec │ ± 3.01 % │ + 3.82 % ║
46-
║ node:querystring │ 10000 │ 3197501.34 op/sec │ ± 1.16 % │ + 344.19 % ║
47-
╟──────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
48-
║ Fastest test │ Samples │ Result │ Tolerance │ Difference with previous ║
49-
╟──────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
50-
║ fast-querystring │ 10000 │ 3500432.30 op/sec │ ± 5.57 % │ + 9.47 % ║
51-
╚══════════════════╧═════════╧═══════════════════╧═══════════╧══════════════════════════╝
41+
╔═════════════════════════════════════════╤═════════╤═══════════════════╤═══════════╤══════════════════════════╗
42+
║ Slower tests │ Samples │ Result │ Tolerance │ Difference with previous ║
43+
╟─────────────────────────────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
44+
║ qs │ 10000 │ 316721.51 op/sec │ ± 1.13 % │ ║
45+
║ query-string │ 10000 │ 336703.57 op/sec │ ± 1.07 % │ + 6.31 % ║
46+
║ URLSearchParams-with-Object.fromEntries │ 10000 │ 855837.00 op/sec │ ± 2.37 % │ + 154.18 % ║
47+
║ URLSearchParams-with-construct │ 3000 │ 1157891.65 op/sec │ ± 0.87 % │ + 35.29 % ║
48+
║ node:querystring │ 2500 │ 1414600.03 op/sec │ ± 0.96 % │ + 22.17 % ║
49+
╟─────────────────────────────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
50+
║ Fastest test │ Samples │ Result │ Tolerance │ Difference with previous ║
51+
╟─────────────────────────────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
52+
║ fast-querystring │ 10000 │ 1500650.01 op/sec │ ± 2.52 % │ + 6.08 % ║
53+
╚═════════════════════════════════════════╧═════════╧═══════════════════╧═══════════╧══════════════════════════╝
5254
```

test/benchmark.mjs

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,46 @@ import queryString from "query-string";
77
await benchmark(
88
{
99
qs() {
10-
return qs.parse("frappucino=muffin&goat%5B%5D=scone&pond=moose");
10+
return qs.parse(
11+
"frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz",
12+
);
1113
},
1214
"fast-querystring"() {
13-
return fastQueryString.parse("frappucino=muffin&goat%5B%5D=scone&pond=moose");
15+
return fastQueryString.parse(
16+
"frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz",
17+
);
1418
},
1519
"node:querystring"() {
16-
return native.parse("frappucino=muffin&goat%5B%5D=scone&pond=moose");
20+
return native.parse(
21+
"frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz",
22+
);
1723
},
1824
"query-string"() {
19-
return queryString.parse("frappucino=muffin&goat%5B%5D=scone&pond=moose");
25+
return queryString.parse(
26+
"frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz",
27+
);
2028
},
21-
URLSearchParams() {
22-
return new URLSearchParams("frappucino=muffin&goat%5B%5D=scone&pond=moose");
29+
"URLSearchParams-with-Object.fromEntries"() {
30+
const urlParams = new URLSearchParams(
31+
"frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz",
32+
);
33+
return Object.fromEntries(urlParams);
34+
},
35+
"URLSearchParams-with-construct"() {
36+
const u = new URLSearchParams(
37+
"frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz",
38+
);
39+
const data = {};
40+
for (const [key, value] of u.entries()) {
41+
if (Array.isArray(data[key])) {
42+
data[key].push(value);
43+
} else if (data[key]) {
44+
data[key] = [].concat(data[key], value);
45+
} else {
46+
data[key] = value;
47+
}
48+
}
49+
return data;
2350
},
2451
},
2552
{ warmup: true, print: { compare: true, compareMode: "previous" } },

0 commit comments

Comments
 (0)