| import { Bench } from 'tinybench' |
| import { fastUri } from '../index.js' |
| import { parse as uriJsParse, serialize as uriJsSerialize, resolve as uriJsResolve, equal as uriJsEqual } from 'uri-js' |
| |
| const base = 'uri://a/b/c/d;p?q' |
| |
| const domain = 'https://example.com/foo#bar$fiz' |
| const ipv4 = '//10.10.10.10' |
| const ipv6 = '//[2001:db8::7]' |
| const urn = 'urn:foo:a123,456' |
| const urnuuid = 'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6' |
| |
| const urnuuidComponent = { |
| scheme: 'urn', |
| nid: 'uuid', |
| uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6' |
| } |
| |
| const { |
| parse: fastUriParse, |
| serialize: fastUriSerialize, |
| resolve: fastUriResolve, |
| equal: fastUriEqual, |
| } = fastUri |
| |
| // Initialization as there is a lot to parse at first |
| // eg: regexes |
| fastUriParse(domain) |
| uriJsParse(domain) |
| |
| const benchFastUri = new Bench({ name: 'fast-uri benchmark' }) |
| const benchUriJs = new Bench({ name: 'uri-js benchmark' }) |
| const benchWHATWG = new Bench({ name: 'WHATWG URL benchmark' }) |
| |
| benchFastUri.add('fast-uri: parse domain', function () { |
| fastUriParse(domain) |
| }) |
| benchUriJs.add('urijs: parse domain', function () { |
| uriJsParse(domain) |
| }) |
| benchWHATWG.add('WHATWG URL: parse domain', function () { |
| // eslint-disable-next-line |
| new URL(domain) |
| }) |
| benchFastUri.add('fast-uri: parse IPv4', function () { |
| fastUriParse(ipv4) |
| }) |
| benchUriJs.add('urijs: parse IPv4', function () { |
| uriJsParse(ipv4) |
| }) |
| benchFastUri.add('fast-uri: parse IPv6', function () { |
| fastUriParse(ipv6) |
| }) |
| benchUriJs.add('urijs: parse IPv6', function () { |
| uriJsParse(ipv6) |
| }) |
| benchFastUri.add('fast-uri: parse URN', function () { |
| fastUriParse(urn) |
| }) |
| benchUriJs.add('urijs: parse URN', function () { |
| uriJsParse(urn) |
| }) |
| benchWHATWG.add('WHATWG URL: parse URN', function () { |
| // eslint-disable-next-line |
| new URL(urn) |
| }) |
| benchFastUri.add('fast-uri: parse URN uuid', function () { |
| fastUriParse(urnuuid) |
| }) |
| benchUriJs.add('urijs: parse URN uuid', function () { |
| uriJsParse(urnuuid) |
| }) |
| benchFastUri.add('fast-uri: serialize URN uuid', function () { |
| fastUriSerialize(urnuuidComponent) |
| }) |
| benchUriJs.add('uri-js: serialize URN uuid', function () { |
| uriJsSerialize(urnuuidComponent) |
| }) |
| benchFastUri.add('fast-uri: serialize uri', function () { |
| fastUriSerialize({ |
| scheme: 'uri', |
| userinfo: 'foo:bar', |
| host: 'example.com', |
| port: 1, |
| path: 'path', |
| query: 'query', |
| fragment: 'fragment' |
| }) |
| }) |
| benchUriJs.add('urijs: serialize uri', function () { |
| uriJsSerialize({ |
| scheme: 'uri', |
| userinfo: 'foo:bar', |
| host: 'example.com', |
| port: 1, |
| path: 'path', |
| query: 'query', |
| fragment: 'fragment' |
| }) |
| }) |
| benchFastUri.add('fast-uri: serialize long uri with dots', function () { |
| fastUriSerialize({ |
| scheme: 'uri', |
| userinfo: 'foo:bar', |
| host: 'example.com', |
| port: 1, |
| path: './a/./b/c/../.././d/../e/f/.././/', |
| query: 'query', |
| fragment: 'fragment' |
| }) |
| }) |
| benchUriJs.add('urijs: serialize long uri with dots', function () { |
| uriJsSerialize({ |
| scheme: 'uri', |
| userinfo: 'foo:bar', |
| host: 'example.com', |
| port: 1, |
| path: './a/./b/c/../.././d/../e/f/.././/', |
| query: 'query', |
| fragment: 'fragment' |
| }) |
| }) |
| benchFastUri.add('fast-uri: serialize IPv6', function () { |
| fastUriSerialize({ host: '2606:2800:220:1:248:1893:25c8:1946' }) |
| }) |
| benchUriJs.add('urijs: serialize IPv6', function () { |
| uriJsSerialize({ host: '2606:2800:220:1:248:1893:25c8:1946' }) |
| }) |
| benchFastUri.add('fast-uri: serialize ws', function () { |
| fastUriSerialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: true }) |
| }) |
| benchUriJs.add('urijs: serialize ws', function () { |
| uriJsSerialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: true }) |
| }) |
| benchFastUri.add('fast-uri: resolve', function () { |
| fastUriResolve(base, '../../../g') |
| }) |
| benchUriJs.add('urijs: resolve', function () { |
| uriJsResolve(base, '../../../g') |
| }) |
| |
| benchFastUri.add('fast-uri: equal', function () { |
| fastUriEqual('example://a/b/c/%7Bfoo%7D', 'eXAMPLE://a/./b/../b/%63/%7bfoo%7d') |
| }) |
| benchUriJs.add('urijs: equal', function () { |
| uriJsEqual('example://a/b/c/%7Bfoo%7D', 'eXAMPLE://a/./b/../b/%63/%7bfoo%7d') |
| }) |
| |
| await benchFastUri.run() |
| console.log(benchFastUri.name) |
| console.table(benchFastUri.table()) |
| |
| await benchUriJs.run() |
| console.log(benchUriJs.name) |
| console.table(benchUriJs.table()) |
| |
| await benchWHATWG.run() |
| console.log(benchWHATWG.name) |
| console.table(benchWHATWG.table()) |