160 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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())
 |