From 5590a158cb2aa5ba18df67a91d6dedc43515cb94 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Sun, 2 Feb 2025 09:52:19 -0800 Subject: [PATCH] benchmark: add simple parse and test benchmarks for URLPattern --- benchmark/url/urlpattern-parse.js | 28 ++++++++++++++++++++++++++++ benchmark/url/urlpattern-test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 benchmark/url/urlpattern-parse.js create mode 100644 benchmark/url/urlpattern-test.js diff --git a/benchmark/url/urlpattern-parse.js b/benchmark/url/urlpattern-parse.js new file mode 100644 index 00000000000000..65bfc90613006c --- /dev/null +++ b/benchmark/url/urlpattern-parse.js @@ -0,0 +1,28 @@ +'use strict'; +const common = require('../common.js'); +const { URLPattern } = require('url'); +const { ok } = require('assert'); + +const tests = [ + 'https://(sub.)?example(.com/)foo', + { 'hostname': 'xn--caf-dma.com' }, + { 'pathname': '/foo', 'search': 'bar', 'hash': 'baz', + 'baseURL': 'https://example.com:8080' }, + { 'pathname': '/([[a-z]--a])' }, +]; + +const bench = common.createBenchmark(main, { + pattern: tests.map(JSON.stringify), + n: [1e5], +}); + +function main({ pattern, n }) { + const inputPattern = JSON.parse(pattern); + let deadcode; + bench.start(); + for (let i = 0; i < n; i += 1) { + deadcode = new URLPattern(inputPattern); + } + bench.end(n); + ok(deadcode); +} diff --git a/benchmark/url/urlpattern-test.js b/benchmark/url/urlpattern-test.js new file mode 100644 index 00000000000000..445380748b3239 --- /dev/null +++ b/benchmark/url/urlpattern-test.js @@ -0,0 +1,30 @@ +'use strict'; +const common = require('../common.js'); +const { URLPattern } = require('url'); +const { notStrictEqual } = require('assert'); + +const tests = [ + 'https://(sub.)?example(.com/)foo', + { 'hostname': 'xn--caf-dma.com' }, + { 'pathname': '/foo', 'search': 'bar', 'hash': 'baz', + 'baseURL': 'https://example.com:8080' }, + { 'pathname': '/([[a-z]--a])' }, +]; + +const bench = common.createBenchmark(main, { + pattern: tests.map(JSON.stringify), + n: [1e5], +}); + +function main({ pattern, n }) { + const inputPattern = JSON.parse(pattern); + const urlpattern = new URLPattern(inputPattern); + + let deadcode; + bench.start(); + for (let i = 0; i < n; i += 1) { + deadcode = urlpattern.test('https://sub.example.com/foo'); + } + bench.end(n); + notStrictEqual(deadcode, undefined); // We don't care if it is true or false. +}