[HN Gopher] URL Pattern API
___________________________________________________________________
URL Pattern API
Author : thunderbong
Score : 33 points
Date : 2025-12-25 20:27 UTC (2 hours ago)
(HTM) web link (developer.mozilla.org)
(TXT) w3m dump (developer.mozilla.org)
| jauntywundrkind wrote:
| Great tool. So glad we have something!
|
| Alas, also has mis-use. You don't want to linearly parse urls, as
| a router! Addition was controversial because folks anticipated
| mis-use like this. https://news.ycombinator.com/item?id=46043318
| mdhb wrote:
| Can you talk more about this... I was under the impression that
| was the EXPLICIT reason [1] why it was added in the first place
| or did I misread your comment?
|
| It's also something the Lit team uses like here:
| https://www.npmjs.com/package/@lit-labs/router
|
| I think maybe we are just debating the data structure the hold
| the patterns? Like it should be a trie rather than say a Set or
| Map.
|
| [1] https://developer.chrome.com/docs/web-platform/urlpattern
| tshaddox wrote:
| It would take a very large number of routes before linear
| search would become a noticeable performance problem.
|
| At that point, you'd probably be splitting the router itself
| into multiple client bundles, with something at the root to
| quickly match the URL with a bundle of routes (maybe a hash
| table on the first URL segment, or even a trie).
|
| This URLPattern library and linear search would still be a
| reasonable choice for implementing each individual route
| bundle. And in practice, just do it the naive way until it
| actually becomes a problem.
| BiteCode_dev wrote:
| I just tried to match a URL against about a hundred patterns of
| various types (thanks to Claude code), expecting it to be a
| non-issue.
|
| A hundred regex tests, for example, is generally very fast. A
| quick Python script made them run in 0.85ms. A hundred Flask
| router tests is 2.64ms.
|
| So I had no reason to think this API would be slow. Surely
| matching a URL is a subset of generalized regexes and can only
| be fast? And given that routing is not an activity you do a
| lot, why would it matter anyway?
|
| But the performances were atrocious: it took 8 seconds to
| resolve the worst-case scenario on Firefox, and it locked the
| entire browser UI.
|
| Ok, note to self, stay away from the URL Pattern API.
| creatonez wrote:
| ...Eight seconds for a hundred matches? What does your code
| look like?
| petesergeant wrote:
| > Note: This feature is available in Web Workers.
|
| ... is _also_ available in Web Workers, or _only_ available in
| Web Workers?
| potsandpans wrote:
| Also
| socketcluster wrote:
| I don't like this API.
|
| Overall I dislike the shift away from a URL as a language-
| agnostic string primitive to some weird convoluted object which
| is limited to specific use cases.
|
| URL literally stands for Universal Resource Locator... A string
| is Universal. It can be passed around easily between processes,
| it can be easily stored in a database, it can be easily shared
| online, it can be easily passed to an LLM... URLs were supported
| by LLMs before LLMs even existed! You've got to appreciate that!
|
| This class they call URL is actually not a URL at all, it's more
| like a bound URLParser or URLExtractor.
|
| A URL is a string that's a fact. Even ask Google; "is a URL a
| string?" it will say yes.
|
| The idea of a URL instance as a language-specific construct is a
| bad idea. It's one of the reasons why many people don't like
| Java.
| echoangle wrote:
| The class isn't called URL, it's called URLPattern. Because it
| represents a pattern that URLs can be matched against.
___________________________________________________________________
(page generated 2025-12-25 23:00 UTC)