Skip to content

Commit

Permalink
benchmark: add benchmark for WHATWG URL properties
Browse files Browse the repository at this point in the history
PR-URL: #10408
Fixes: #10376
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
joyeecheung authored and evanlucas committed Jan 4, 2017
1 parent 785975d commit 0b2bc5e
Showing 1 changed file with 91 additions and 0 deletions.
91 changes: 91 additions & 0 deletions benchmark/url/whatwg-url-properties.js
Original file line number Diff line number Diff line change
@@ -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');
}
}

0 comments on commit 0b2bc5e

Please sign in to comment.