diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2016-12-23 02:58:45 +0800 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2016-12-29 15:46:50 -0800 |
commit | b7fadf0fa48dee89284e0510ad4de6343636495c (patch) | |
tree | 13b8b5d5270599c16d1c0eb0f96a4c4f2670d02f /benchmark/url | |
parent | c8301794f1948880938298d7b1933ca1f5d51a76 (diff) | |
download | node-new-b7fadf0fa48dee89284e0510ad4de6343636495c.tar.gz |
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>
Diffstat (limited to 'benchmark/url')
-rw-r--r-- | benchmark/url/whatwg-url-properties.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/benchmark/url/whatwg-url-properties.js b/benchmark/url/whatwg-url-properties.js new file mode 100644 index 0000000000..a3c4d886bd --- /dev/null +++ b/benchmark/url/whatwg-url-properties.js @@ -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'); + } +} |