|
|
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: regexesfastUriParse(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())
|