1'use strict';
2const common = require('../common.js');
3const querystring = require('querystring');
4const searchParams = common.searchParams;
5
6const bench = common.createBenchmark(main, {
7  searchParam: Object.keys(searchParams),
8  method: ['legacy', 'whatwg'],
9  n: [1e6],
10});
11
12function useLegacy(n, input) {
13  querystring.parse(input);
14  bench.start();
15  for (let i = 0; i < n; i += 1) {
16    querystring.parse(input);
17  }
18  bench.end(n);
19}
20
21function useWHATWG(n, param) {
22  new URLSearchParams(param);
23  bench.start();
24  for (let i = 0; i < n; i += 1) {
25    new URLSearchParams(param);
26  }
27  bench.end(n);
28}
29
30function main({ searchParam, n, method }) {
31  const param = searchParams[searchParam];
32  if (!param) {
33    throw new Error(`Unknown search parameter type "${searchParam}"`);
34  }
35
36  switch (method) {
37    case 'legacy':
38      useLegacy(n, param);
39      break;
40    case 'whatwg':
41      useWHATWG(n, param);
42      break;
43    default:
44      throw new Error(`Unknown method ${method}`);
45  }
46}
47