Skip to content

url: spec-compliant URLSearchParams serializer

Differences with querystring module (which the serializer currently depends on):

code point querystring spec
U+0020   %20 +
U+0027 ' ' %27
U+0028 ( ( %28
U+0029 ) ) %29
U+007E ~ ~ %7E

A C++ implementation cannot seem to reach the JS version's performance.

Benchmark: before vs. after
                                                                                                    improvement confidence      p.value
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="altspaces"          56.97 %        *** 1.131841e-33
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodefake"         85.79 %        *** 8.380179e-49
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodelast"        133.54 %        *** 4.568047e-52
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodemany"        136.69 %        *** 3.839133e-66
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="manyblankpairs"    102.90 %        *** 2.115923e-35
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="manypairs"         423.66 %        *** 2.121638e-43
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multicharsep"      136.13 %        *** 1.320596e-54
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multivalue"         88.71 %        *** 1.524783e-59
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multivaluemany"     25.24 %        *** 3.994424e-41
 url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="noencode"          135.61 %        *** 3.251158e-44
Benchmark: legacy (querystring) vs. WHATWG
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="noencode": 2,671,975.4115417274
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="noencode": 3,008,967.4994620117
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="multicharsep": 2,615,972.2291527316
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multicharsep": 2,885,936.0222384227
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="encodefake": 1,493,426.4438126145
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodefake": 1,641,878.4775006676
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="encodemany": 2,565,969.8400934297
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodemany": 3,025,840.9510215684
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="encodelast": 2,613,356.200269775
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodelast": 2,901,369.8722106437
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="multivalue": 2,615,576.6498150555
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multivalue": 2,502,413.2021715143
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="multivaluemany": 1,383,932.6225206275
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multivaluemany": 985,021.4923070684
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="manypairs": 399,773.9756297489
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="manypairs": 804,542.90558165
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="manyblankpairs": 14,459,573.094118012
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="manyblankpairs": 10,583,700.054130334
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="altspaces": 1,092,358.4670786818
url/legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="altspaces": 1,174,023.8424377916
Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines
Affected core subsystem(s)

url

Merge request reports

Loading