mirror of
https://github.com/nodejs/node.git
synced 2024-11-29 15:06:33 +01:00
benchmark: add benchmark for WHATWG URL properties
PR-URL: https://github.com/nodejs/node/pull/10408 Fixes: https://github.com/nodejs/node/issues/10376 Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
c8301794f1
commit
b7fadf0fa4
91
benchmark/url/whatwg-url-properties.js
Normal file
91
benchmark/url/whatwg-url-properties.js
Normal file
@ -0,0 +1,91 @@
|
||||
'use strict';
|
||||
|
||||
var common = require('../common.js');
|
||||
var URL = require('url').URL;
|
||||
|
||||
var bench = common.createBenchmark(main, {
|
||||
url: [
|
||||
'http://example.com/',
|
||||
'https://encrypted.google.com/search?q=url&q=site:npmjs.org&hl=en',
|
||||
'javascript:alert("node is awesome");',
|
||||
'http://user:pass@foo.bar.com:21/aaa/zzz?l=24#test'
|
||||
],
|
||||
prop: ['toString', '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);
|
||||
}
|
||||
|
||||
function stringify(n, url, prop) {
|
||||
bench.start();
|
||||
for (var i = 0; i < n; i += 1) {
|
||||
url.toString();
|
||||
}
|
||||
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 url = new URL(conf.url);
|
||||
const prop = conf.prop;
|
||||
|
||||
switch (prop) {
|
||||
case 'protocol':
|
||||
case 'username':
|
||||
case 'password':
|
||||
case 'host':
|
||||
case 'hostname':
|
||||
case 'port':
|
||||
case 'pathname':
|
||||
case 'search':
|
||||
case 'hash':
|
||||
setAndGet(n, url, prop, getAlternative(prop));
|
||||
break;
|
||||
// TODO: move href to the first group when the setter lands.
|
||||
case 'href':
|
||||
case 'origin':
|
||||
case 'searchParams':
|
||||
get(n, url, prop);
|
||||
break;
|
||||
case 'toString':
|
||||
stringify(n, url);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unknown prop');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user