summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorYagiz Nizipli <yagiz@nizipli.com>2023-04-13 17:37:17 -0400
committerGitHub <noreply@github.com>2023-04-13 21:37:17 +0000
commitcd0fcf20c3bcef392f88106a2a3ced62c512c007 (patch)
tree64255cfa6de76843db9e687db0a8495addd5b139 /benchmark
parent1c3cbf3c78395b540af682d90789436eee7be82e (diff)
downloadnode-new-cd0fcf20c3bcef392f88106a2a3ced62c512c007.tar.gz
benchmark: differentiate whatwg and legacy url
PR-URL: https://github.com/nodejs/node/pull/47377 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/url/legacy-url-get-prop.js41
-rw-r--r--benchmark/url/legacy-url-parse.js22
-rw-r--r--benchmark/url/legacy-vs-whatwg-url-get-prop.js90
-rw-r--r--benchmark/url/whatwg-url-canParse.js (renamed from benchmark/url/whatwgurl-canParse.js)0
-rw-r--r--benchmark/url/whatwg-url-get-prop.js40
-rw-r--r--benchmark/url/whatwg-url-parse.js (renamed from benchmark/url/legacy-vs-whatwg-url-parse.js)30
-rw-r--r--benchmark/url/whatwg-url-to-and-from-path.js (renamed from benchmark/url/whatwgurl-to-and-from-path.js)0
7 files changed, 106 insertions, 117 deletions
diff --git a/benchmark/url/legacy-url-get-prop.js b/benchmark/url/legacy-url-get-prop.js
new file mode 100644
index 0000000000..09be863e96
--- /dev/null
+++ b/benchmark/url/legacy-url-get-prop.js
@@ -0,0 +1,41 @@
+'use strict';
+const common = require('../common.js');
+const url = require('url');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ type: common.urlDataTypes,
+ e: [1],
+});
+
+function main({ type, e }) {
+ const data = common.bakeUrlData(type, e, false, false).map((i) => url.parse(i));
+ const obj = url.parse(data[0]);
+ const noDead = {
+ protocol: obj.protocol,
+ auth: obj.auth,
+ host: obj.host,
+ hostname: obj.hostname,
+ port: obj.port,
+ pathname: obj.pathname,
+ search: obj.search,
+ hash: obj.hash,
+ };
+ const len = data.length;
+ // It's necessary to assign the values to an object
+ // to avoid loop invariant code motion.
+ bench.start();
+ for (let i = 0; i < len; i++) {
+ const obj = data[i];
+ noDead.protocol = obj.protocol;
+ noDead.auth = obj.auth;
+ noDead.host = obj.host;
+ noDead.hostname = obj.hostname;
+ noDead.port = obj.port;
+ noDead.pathname = obj.pathname;
+ noDead.search = obj.search;
+ noDead.hash = obj.hash;
+ }
+ bench.end(len);
+ assert.ok(noDead);
+}
diff --git a/benchmark/url/legacy-url-parse.js b/benchmark/url/legacy-url-parse.js
new file mode 100644
index 0000000000..ac893ebf8a
--- /dev/null
+++ b/benchmark/url/legacy-url-parse.js
@@ -0,0 +1,22 @@
+'use strict';
+const common = require('../common.js');
+const url = require('url');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ type: common.urlDataTypes,
+ e: [1],
+});
+
+function main({ e, type }) {
+ const data = common.bakeUrlData(type, e, false, false);
+ let result = url.parse(data[0]); // Avoid dead code elimination
+
+ bench.start();
+ for (let i = 0; i < data.length; ++i) {
+ result = url.parse(data[i]);
+ }
+ bench.end(data.length);
+
+ assert.ok(result);
+}
diff --git a/benchmark/url/legacy-vs-whatwg-url-get-prop.js b/benchmark/url/legacy-vs-whatwg-url-get-prop.js
deleted file mode 100644
index df888f13b9..0000000000
--- a/benchmark/url/legacy-vs-whatwg-url-get-prop.js
+++ /dev/null
@@ -1,90 +0,0 @@
-'use strict';
-const common = require('../common.js');
-const url = require('url');
-const URL = url.URL;
-const assert = require('assert');
-
-const bench = common.createBenchmark(main, {
- type: common.urlDataTypes,
- method: ['legacy', 'whatwg'],
- e: [1],
-});
-
-function useLegacy(data) {
- const obj = url.parse(data[0]);
- const noDead = {
- protocol: obj.protocol,
- auth: obj.auth,
- host: obj.host,
- hostname: obj.hostname,
- port: obj.port,
- pathname: obj.pathname,
- search: obj.search,
- hash: obj.hash,
- };
- const len = data.length;
- // It's necessary to assign the values to an object
- // to avoid loop invariant code motion.
- bench.start();
- for (let i = 0; i < len; i++) {
- const obj = data[i];
- noDead.protocol = obj.protocol;
- noDead.auth = obj.auth;
- noDead.host = obj.host;
- noDead.hostname = obj.hostname;
- noDead.port = obj.port;
- noDead.pathname = obj.pathname;
- noDead.search = obj.search;
- noDead.hash = obj.hash;
- }
- bench.end(len);
- return noDead;
-}
-
-function useWHATWG(data) {
- const obj = new URL(data[0]);
- const noDead = {
- protocol: obj.protocol,
- auth: `${obj.username}:${obj.password}`,
- host: obj.host,
- hostname: obj.hostname,
- port: obj.port,
- pathname: obj.pathname,
- search: obj.search,
- hash: obj.hash,
- };
- const len = data.length;
- bench.start();
- for (let i = 0; i < len; i++) {
- const obj = data[i];
- noDead.protocol = obj.protocol;
- noDead.auth = `${obj.username}:${obj.password}`;
- noDead.host = obj.host;
- noDead.hostname = obj.hostname;
- noDead.port = obj.port;
- noDead.pathname = obj.pathname;
- noDead.search = obj.search;
- noDead.hash = obj.hash;
- }
- bench.end(len);
- return noDead;
-}
-
-function main({ type, method, e }) {
- let data;
- let noDead; // Avoid dead code elimination.
- switch (method) {
- case 'legacy':
- data = common.bakeUrlData(type, e, false, false);
- noDead = useLegacy(data.map((i) => url.parse(i)));
- break;
- case 'whatwg':
- data = common.bakeUrlData(type, e, false, true);
- noDead = useWHATWG(data);
- break;
- default:
- throw new Error(`Unknown method "${method}"`);
- }
-
- assert.ok(noDead);
-}
diff --git a/benchmark/url/whatwgurl-canParse.js b/benchmark/url/whatwg-url-canParse.js
index 3896d78578..3896d78578 100644
--- a/benchmark/url/whatwgurl-canParse.js
+++ b/benchmark/url/whatwg-url-canParse.js
diff --git a/benchmark/url/whatwg-url-get-prop.js b/benchmark/url/whatwg-url-get-prop.js
new file mode 100644
index 0000000000..3a88dd1da6
--- /dev/null
+++ b/benchmark/url/whatwg-url-get-prop.js
@@ -0,0 +1,40 @@
+'use strict';
+const common = require('../common.js');
+const url = require('url');
+const URL = url.URL;
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ type: common.urlDataTypes,
+ e: [1],
+});
+
+function main({ type, e }) {
+ const data = common.bakeUrlData(type, e, false, true);
+ const obj = new URL(data[0]);
+ const noDead = {
+ protocol: obj.protocol,
+ auth: `${obj.username}:${obj.password}`,
+ host: obj.host,
+ hostname: obj.hostname,
+ port: obj.port,
+ pathname: obj.pathname,
+ search: obj.search,
+ hash: obj.hash,
+ };
+ const len = data.length;
+ bench.start();
+ for (let i = 0; i < len; i++) {
+ const obj = data[i];
+ noDead.protocol = obj.protocol;
+ noDead.auth = `${obj.username}:${obj.password}`;
+ noDead.host = obj.host;
+ noDead.hostname = obj.hostname;
+ noDead.port = obj.port;
+ noDead.pathname = obj.pathname;
+ noDead.search = obj.search;
+ noDead.hash = obj.hash;
+ }
+ bench.end(len);
+ assert.ok(noDead);
+}
diff --git a/benchmark/url/legacy-vs-whatwg-url-parse.js b/benchmark/url/whatwg-url-parse.js
index a54d81e15f..0c10b12587 100644
--- a/benchmark/url/legacy-vs-whatwg-url-parse.js
+++ b/benchmark/url/whatwg-url-parse.js
@@ -8,20 +8,8 @@ const bench = common.createBenchmark(main, {
withBase: ['true', 'false'],
type: common.urlDataTypes,
e: [1],
- method: ['legacy', 'whatwg'],
});
-function useLegacy(data) {
- const len = data.length;
- let result = url.parse(data[0]); // Avoid dead code elimination
- bench.start();
- for (let i = 0; i < len; ++i) {
- result = url.parse(data[i]);
- }
- bench.end(len);
- return result;
-}
-
function useWHATWGWithBase(data) {
const len = data.length;
let result = new URL(data[0][0], data[0][1]); // Avoid dead code elimination
@@ -45,22 +33,10 @@ function useWHATWGWithoutBase(data) {
return result;
}
-function main({ e, method, type, withBase }) {
+function main({ e, type, withBase }) {
withBase = withBase === 'true';
- let noDead; // Avoid dead code elimination.
- let data;
- switch (method) {
- case 'legacy':
- data = common.bakeUrlData(type, e, false, false);
- noDead = useLegacy(data);
- break;
- case 'whatwg':
- data = common.bakeUrlData(type, e, withBase, false);
- noDead = withBase ? useWHATWGWithBase(data) : useWHATWGWithoutBase(data);
- break;
- default:
- throw new Error(`Unknown method ${method}`);
- }
+ const data = common.bakeUrlData(type, e, withBase, false);
+ const noDead = withBase ? useWHATWGWithBase(data) : useWHATWGWithoutBase(data);
assert.ok(noDead);
}
diff --git a/benchmark/url/whatwgurl-to-and-from-path.js b/benchmark/url/whatwg-url-to-and-from-path.js
index 3b87c0670a..3b87c0670a 100644
--- a/benchmark/url/whatwgurl-to-and-from-path.js
+++ b/benchmark/url/whatwg-url-to-and-from-path.js