Autolinker.js icon indicating copy to clipboard operation
Autolinker.js copied to clipboard

3 seconds to parse link in safari

Open kevinswartz opened this issue 4 years ago • 1 comments

Hey guys, Great plugin! We recently ran into a weird case with a weird link.

I use Autolinker.parse() on user-submitted text to detect links, and in one case, a link is taking Safari (v14.1.2) about 3 seconds to parse. In Chrome (v93.0.4577), the same link is parsed in ~50ms. We have also seen this happen in Mobile Safari.

Here's the link:

cf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comcf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.comf9.prodtest.086f6461c4f4ee752.test32.com

I can reproduce using Autolinker v3.14.3. I'm also creating a single instance of Autolinker to call parse on so that it's not re-created in a loop.
Let me know if you need anything else. Thanks!

kevinswartz avatar Sep 07 '21 15:09 kevinswartz

Wow, that's quite a url! And I guess Safari suffers from a slow regex backtracking algorithm :(

Hmm, will have to investigate.

PRs always welcome btw!

gregjacobs avatar Sep 08 '21 02:09 gregjacobs

Basically rewrote the URL parser from scratch and it no longer has this issue in Safari. Will be released in v4.0

gregjacobs avatar Sep 07 '22 18:09 gregjacobs

That's fantastic, I'll give it a try. Thanks @gregjacobs !

kevinswartz avatar Sep 07 '22 18:09 kevinswartz

I'll let you know when v4.0 is released - I'm almost done with it :)

gregjacobs avatar Sep 07 '22 18:09 gregjacobs

Ok this is now released in v4.0.0. Give it a try!

Best, Greg

gregjacobs avatar Sep 07 '22 22:09 gregjacobs

Looks like it's fixed to me. Thanks for your help!

kevinswartz avatar Sep 08 '22 17:09 kevinswartz

Awesome and glad to hear!

Best, Greg

gregjacobs avatar Sep 08 '22 18:09 gregjacobs