A Fast implementation of url parsing, mostly API-compatible with the standard URL class while being on average 2-3 times faster. Evaluation of URL components is lazy, so this implementation should be fast for all read use-cases.
Known differences to standard URL:
- Parameters returned via
URL.searchParams.entries()
are decoded only withdecodeURIComponent
. This differs to standards parsing in some subtle ways. - You can iterate a URL parameters array directly via
URL.searchParams.params
. This is around 20% faster than using an iterator. - Parameter strings (
;
sepearated key/value pairs) are parsed, and accessible viaURL.parameters
. - Domain parsing with tldts is built in. The
URL.domainInfo
attribute returns output from tldts'parseHost
method. - Hostname validation is not done on initial parse. The
isValidHost()
method is provided for this purpose. - All URLs with a valid authority are given an
origin
, regardless of the protocol scheme. This differs from the standard that only does so for a set of known schemes.
npm install @ghostery/url-parser
const parsed = new URL('https://www.example.com');
parsed.hostname // == 'www.example.com'
We benchmark against a list of 250,000 URLs collected from popular sites, as previously used in our adblocker benchmark. We compare two use-cases:
-
URL
object creation:new URL(url)
- Query string parsing:
new URL(url).searchParams.entries()
We compare to a reference implementation on each platform:
- Node:
URL
class from theurl
library - Firefox:
window.URL
- Chrome:
window.URL
- Safari:
window.URL
Environment | Use case | Reference: urls/s | Ghostery parser: urls/s | Speedup |
---|---|---|---|---|
Node 11 | new URL() |
149,514 |
1,577,711 |
10.5x faster |
Node 11 | searchParams |
140,544 |
198,340 |
1.4x faster |
Firefox 69 | new URL() |
268,066 |
1,043,877 |
3.9x faster |
Firefox 69 | searchParams |
119,207 |
354,793 |
3.0x faster |
Chrome 75 | new URL() |
366,294 |
1,721,903 |
4.7x faster |
Chrome 75 | searchParams |
144,309 |
283,956 |
2.0x faster |
Safari 12 | new URL() |
656,930 |
1,525,078 |
2.3x faster |
Safari 12 | searchParams |
264,481 |
437,738 |
1.7x faster |
All benchmarks were run on a Mid 2015 Macbook Pro, 2.5 GHz Intel Core i7, 16GB.