mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
28c9fb9592
Refs: https://github.com/nodejs/performance/issues/56 PR-URL: https://github.com/nodejs/node/pull/46810 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
'use strict';
|
|
const common = require('../common.js');
|
|
|
|
const values = {
|
|
noencode: {
|
|
foo: 'bar',
|
|
baz: 'quux',
|
|
xyzzy: 'thud',
|
|
},
|
|
encodemany: {
|
|
'\u0080\u0083\u0089': 'bar',
|
|
'\u008C\u008E\u0099': 'quux',
|
|
'xyzzy': '\u00A5q\u00A3r',
|
|
},
|
|
encodelast: {
|
|
foo: 'bar',
|
|
baz: 'quux',
|
|
xyzzy: 'thu\u00AC',
|
|
},
|
|
array: {
|
|
foo: [],
|
|
baz: ['bar'],
|
|
xyzzy: ['bar', 'quux', 'thud'],
|
|
},
|
|
multiprimitives: {
|
|
foo: false,
|
|
bar: -13.37,
|
|
baz: 'baz',
|
|
},
|
|
};
|
|
|
|
function paramGenerator(paramType) {
|
|
const valueKeys = Object.keys(values);
|
|
switch (paramType) {
|
|
case 'string':
|
|
// Return the values object with all values as strings
|
|
return valueKeys.reduce((acc, key) => {
|
|
const objectKeys = Object.keys(values[key]);
|
|
acc[key] = objectKeys.reduce((acc, k, i) => {
|
|
acc += `${k}=${values[key][k]}${i < objectKeys.length - 1 ? '&' : ''}`;
|
|
return acc;
|
|
}, '');
|
|
return acc;
|
|
}, {});
|
|
case 'iterable':
|
|
// Return the values object with all values as iterable
|
|
return valueKeys.reduce((acc, key) => {
|
|
acc[key] = Object.keys(values[key]).reduce((acc, k) => {
|
|
acc.push([k, values[key][k]]);
|
|
return acc;
|
|
}, []);
|
|
return acc;
|
|
}, {});
|
|
case 'object':
|
|
// Return the values object with all values as objects
|
|
return values;
|
|
default:
|
|
}
|
|
}
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
type: ['noencode', 'encodemany', 'encodelast', 'array', 'multiprimitives'],
|
|
inputType: ['string', 'iterable', 'object'],
|
|
n: [1e6],
|
|
});
|
|
|
|
function main({ n, type, inputType }) {
|
|
const inputs = paramGenerator(inputType);
|
|
const input = inputs[type];
|
|
const u = new URLSearchParams(input);
|
|
|
|
bench.start();
|
|
for (let i = 0; i < n; i += 1)
|
|
u.toString();
|
|
bench.end(n);
|
|
}
|