0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00
nodejs/benchmark/url/whatwg-url-properties.js
Joyee Cheung d8ac08a62a benchmark: refactor whatwg-url-properties
PR-URL: https://github.com/nodejs/node/pull/11264
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Brian White <mscdex@mscdex.net>
2017-02-15 09:12:25 -08:00

76 lines
1.6 KiB
JavaScript

'use strict';
const common = require('../common.js');
const URL = require('url').URL;
const inputs = require('../fixtures/url-inputs.js').urls;
const bench = common.createBenchmark(main, {
input: Object.keys(inputs),
prop: ['href', 'origin', 'protocol',
'username', 'password', 'host', 'hostname', 'port',
'pathname', 'search', 'searchParams', 'hash'],
n: [1e4]
});
function setAndGet(n, url, prop, alternative) {
const old = url[prop];
bench.start();
for (var i = 0; i < n; i += 1) {
url[prop] = n % 2 === 0 ? alternative : old; // set
url[prop]; // get
}
bench.end(n);
}
function get(n, url, prop) {
bench.start();
for (var i = 0; i < n; i += 1) {
url[prop]; // get
}
bench.end(n);
}
const alternatives = {
href: 'http://user:pass@foo.bar.com:21/aaa/zzz?l=25#test',
protocol: 'https:',
username: 'user2',
password: 'pass2',
host: 'foo.bar.net:22',
hostname: 'foo.bar.org',
port: '23',
pathname: '/aaa/bbb',
search: '?k=99',
hash: '#abcd'
};
function getAlternative(prop) {
return alternatives[prop];
}
function main(conf) {
const n = conf.n | 0;
const input = inputs[conf.input];
const url = new URL(input);
const prop = conf.prop;
switch (prop) {
case 'protocol':
case 'username':
case 'password':
case 'host':
case 'hostname':
case 'port':
case 'pathname':
case 'search':
case 'hash':
case 'href':
setAndGet(n, url, prop, getAlternative(prop));
break;
case 'origin':
case 'searchParams':
get(n, url, prop);
break;
default:
throw new Error('Unknown prop');
}
}