mdgriffith / elm-optimize-level-2

BSD 3-Clause "New" or "Revised" License
129 stars 14 forks source link

Add replacement for String.startsWith #100

Open jfmengels opened 2 years ago

jfmengels commented 2 years ago

I noticed that String.startsWith can be very slow for large strings when the str does not contain the prefix. The reason being the function actually does a str.indexOf call which will go through the entire function as long as it doesn't find anything.

So I tried benchmarking alternatives.

I tried using the ES2015 startsWith, which is by far faster but doesn't work on IE.

And I also tried another version where we slice the string and compare that to the prefix.

Benchmark

Chrome

Firefox


What do you think of the idea of replacing String.startsWith? Does that sound good?

Maybe we can do something faster in JS where we compare every character one by one.

I also think similar improvements can be made for String.endsWith.

jfmengels commented 2 years ago

Maybe we can do something faster in JS where we compare every character one by one.

I just tested that and that is by far the fastest (even faster than the native startsWith in FF). The screenshots above now reflect that.