| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent bce37c6 commit b5db3b5
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,79 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + const common = require('../common.js'); | ||
| 3 | + | ||
| 4 | + const values = { | ||
| 5 | + noencode: { | ||
| 6 | + foo: 'bar', | ||
| 7 | + baz: 'quux', | ||
| 8 | + xyzzy: 'thud', | ||
| 9 | + }, | ||
| 10 | + encodemany: { | ||
| 11 | + '\u0080\u0083\u0089': 'bar', | ||
| 12 | + '\u008C\u008E\u0099': 'quux', | ||
| 13 | + 'xyzzy': '\u00A5q\u00A3r', | ||
| 14 | + }, | ||
| 15 | + encodelast: { | ||
| 16 | + foo: 'bar', | ||
| 17 | + baz: 'quux', | ||
| 18 | + xyzzy: 'thu\u00AC', | ||
| 19 | + }, | ||
| 20 | + array: { | ||
| 21 | + foo: [], | ||
| 22 | + baz: ['bar'], | ||
| 23 | + xyzzy: ['bar', 'quux', 'thud'], | ||
| 24 | + }, | ||
| 25 | + multiprimitives: { | ||
| 26 | + foo: false, | ||
| 27 | + bar: -13.37, | ||
| 28 | + baz: 'baz', | ||
| 29 | + }, | ||
| 30 | + }; | ||
| 31 | + | ||
| 32 | + function paramGenerator(paramType) { | ||
| 33 | + const valueKeys = Object.keys(values); | ||
| 34 | + switch (paramType) { | ||
| 35 | + case 'string': | ||
| 36 | + // Return the values object with all values as strings | ||
| 37 | + return valueKeys.reduce((acc, key) => { | ||
| 38 | + acc[key] = Object.keys(values[key]).reduce((acc, k, i) => { | ||
| 39 | + acc += `${k}=${values[key][k]}${i < valueKeys.length - 1 ? '&' : ''}`; | ||
| 40 | + return acc; | ||
| 41 | + }, ''); | ||
| 42 | + return acc; | ||
| 43 | + }, {}); | ||
| 44 | + case 'iterable': | ||
| 45 | + // Return the values object with all values as iterable | ||
| 46 | + return valueKeys.reduce((acc, key) => { | ||
| 47 | + acc[key] = Object.keys(values[key]).reduce((acc, k) => { | ||
| 48 | + acc.push([k, values[key][k]]); | ||
| 49 | + return acc; | ||
| 50 | + }, []); | ||
| 51 | + return acc; | ||
| 52 | + }, {}); | ||
| 53 | + case 'object': | ||
| 54 | + // Return the values object with all values as objects | ||
| 55 | + return values; | ||
| 56 | + default: | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + const bench = common.createBenchmark(main, { | ||
| 61 | + type: ['noencode', 'encodemany', 'encodelast', 'array', 'multiprimitives'], | ||
| 62 | + inputType: ['string', 'iterable', 'object'], | ||
| 63 | + n: [1e6], | ||
| 64 | + }); | ||
| 65 | + | ||
| 66 | + function main({ n, type, inputType }) { | ||
| 67 | + const inputs = paramGenerator(inputType); | ||
| 68 | + const input = inputs[type]; | ||
| 69 | + | ||
| 70 | + // Force optimization before starting the benchmark | ||
| 71 | + for (const name in inputs) { | ||
| 72 | + new URLSearchParams(inputs[name]); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + bench.start(); | ||
| 76 | + for (let i = 0; i < n; i += 1) | ||
| 77 | + new URLSearchParams(input); | ||
| 78 | + bench.end(n); | ||
| 79 | + } | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,76 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + const common = require('../common.js'); | ||
| 3 | + | ||
| 4 | + const values = { | ||
| 5 | + noencode: { | ||
| 6 | + foo: 'bar', | ||
| 7 | + baz: 'quux', | ||
| 8 | + xyzzy: 'thud', | ||
| 9 | + }, | ||
| 10 | + encodemany: { | ||
| 11 | + '\u0080\u0083\u0089': 'bar', | ||
| 12 | + '\u008C\u008E\u0099': 'quux', | ||
| 13 | + 'xyzzy': '\u00A5q\u00A3r', | ||
| 14 | + }, | ||
| 15 | + encodelast: { | ||
| 16 | + foo: 'bar', | ||
| 17 | + baz: 'quux', | ||
| 18 | + xyzzy: 'thu\u00AC', | ||
| 19 | + }, | ||
| 20 | + array: { | ||
| 21 | + foo: [], | ||
| 22 | + baz: ['bar'], | ||
| 23 | + xyzzy: ['bar', 'quux', 'thud'], | ||
| 24 | + }, | ||
| 25 | + multiprimitives: { | ||
| 26 | + foo: false, | ||
| 27 | + bar: -13.37, | ||
| 28 | + baz: 'baz', | ||
| 29 | + }, | ||
| 30 | + }; | ||
| 31 | + | ||
| 32 | + function paramGenerator(paramType) { | ||
| 33 | + const valueKeys = Object.keys(values); | ||
| 34 | + switch (paramType) { | ||
| 35 | + case 'string': | ||
| 36 | + // Return the values object with all values as strings | ||
| 37 | + return valueKeys.reduce((acc, key) => { | ||
| 38 | + const objectKeys = Object.keys(values[key]); | ||
| 39 | + acc[key] = objectKeys.reduce((acc, k, i) => { | ||
| 40 | + acc += `${k}=${values[key][k]}${i < objectKeys.length - 1 ? '&' : ''}`; | ||
| 41 | + return acc; | ||
| 42 | + }, ''); | ||
| 43 | + return acc; | ||
| 44 | + }, {}); | ||
| 45 | + case 'iterable': | ||
| 46 | + // Return the values object with all values as iterable | ||
| 47 | + return valueKeys.reduce((acc, key) => { | ||
| 48 | + acc[key] = Object.keys(values[key]).reduce((acc, k) => { | ||
| 49 | + acc.push([k, values[key][k]]); | ||
| 50 | + return acc; | ||
| 51 | + }, []); | ||
| 52 | + return acc; | ||
| 53 | + }, {}); | ||
| 54 | + case 'object': | ||
| 55 | + // Return the values object with all values as objects | ||
| 56 | + return values; | ||
| 57 | + default: | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + const bench = common.createBenchmark(main, { | ||
| 62 | + type: ['noencode', 'encodemany', 'encodelast', 'array', 'multiprimitives'], | ||
| 63 | + inputType: ['string', 'iterable', 'object'], | ||
| 64 | + n: [1e6], | ||
| 65 | + }); | ||
| 66 | + | ||
| 67 | + function main({ n, type, inputType }) { | ||
| 68 | + const inputs = paramGenerator(inputType); | ||
| 69 | + const input = inputs[type]; | ||
| 70 | + const u = new URLSearchParams(input); | ||
| 71 | + | ||
| 72 | + bench.start(); | ||
| 73 | + for (let i = 0; i < n; i += 1) | ||
| 74 | + u.toString(); | ||
| 75 | + bench.end(n); | ||
| 76 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments