You had a bunch of errors in your benchmark. You were passing URL.canParse the URL constructor, not the input. And you were passing an invalid base URL in every test. The try/catch isn't the expensive part, and neither is the thrown/caught error. It's the URL parser. jsbm.dev/7u5XhCC6Z3QY4