我已经阅读了多篇文章和评论,说使用Intl.Collator在比较字符串时有性能上的好处。EcmaScript文档指出,localeCompare只是在底层使用Collator,但可能会在每个函数调用时创建新的Collator实例。
这对我来说是有道理的,但我已经测试了两种选项的性能,结果令人惊讶。我创建了一个包含50000个字符串的数组,其中每个字符串都是由15个小写英文字母组成的。然后我比较了
注意:如果我将第二个参数(例如'pl')传递给localeCompare,它的性能会大大降低。
这对我来说是有道理的,但我已经测试了两种选项的性能,结果令人惊讶。我创建了一个包含50000个字符串的数组,其中每个字符串都是由15个小写英文字母组成的。然后我比较了
array.sort((a, b) => a.localeCompare(b))
和array.sort(collator.compare)
的速度,并创建了一个基准测试,你可以在这里自己看到:
https://www.measurethat.net/Benchmarks/Show/27780/0/intlcollatorcompare-vs-localecompare
一致的结果是,在这种情况下,localeCompare的速度是它的两倍。你能帮我理解为什么吗?注意:如果我将第二个参数(例如'pl')传递给localeCompare,它的性能会大大降低。
localeCompare
在 Firefox 中速度较慢,但在 Chrome 中确实快了 3 倍。Chrome 可能在这方面没有遵守 ECMAScript 规范。 - undefinedCollator
比localeCompare
慢了多次,而在Firefox中,localeCompare
稍微快一些。不过,在这两种情况下,使用===
和<
进行两次比较比其他选项都要快。 - undefined