gpt4 book ai didi

javascript - 在字符串对象上调用 .localeCompare 和构造一个专用的 Intl.Collat​​or 对象之间的性能差异?

转载 作者:行者123 更新时间:2023-11-29 22:07:41 28 4
gpt4 key购买 nike

背景:

所以我need to对很多字符串进行排序。实际上是字符串数组,但这不是重点。不是的是我需要实现自己的排序器功能,如链接问题中所述。性能对我来说非常重要。 jFriend00 非常有帮助地建议我使用 String.prototype.localeCompare。我正在排序的数组有 100K+ 个元素,因此性能非常重要。关于MDN doc for .localeCompare ,在 Performance 下,它说:

When comparing large numbers of strings, such as in sorting large arrays, it is better to create an Intl.Collator object and use the function provided by its compare property.

使用它似乎很简单,jFriend 函数的实现如下所示在功能上似乎是等效的:

data = (function(arrE2){
var nIC = new Intl.Collator,
cmp = nIC.compare.bind(nIC);

return arrE2.concat().sort(function(a, b) {
var comp, i;
for (i = 0; i < Math.min(a.length, b.length); i++) {
if ((comp = cmp(a[i], b[i])) !== 0) return comp;
}
return (a.length > b.length) - (a.length < b.length);
});
})(data);

(如果它与 jFriend 的解决方案有任何不同,请纠正我。)

但是,我不清楚这是否会产生任何显着的优越性能,如果是,那么如何。 MDN 当然可以更好地解释,因为 Intl.Collator 的链接页面甚至没有提到“性能”。所以我只剩下我自己的设备了..我是一个 n00b,所以我的直觉是相当毫无值(value)的,但我能想到的提高性能的唯一方法是规范的替代方案是否需要将整个语言环境加载到为每个单独的比较重新分配内存,同时保留分配的内存以将语言环境数据存储在对象中。

我的问题是:

  • 两者的行为是否相同?
  • 随着性能的发展,我的新版本是否更优越?如果是,是否显着?

最佳答案

我遇到了类似的问题并找到了 this jsperf真的很有用。

底线:是的,Intl.Collat​​or 几乎是 a.localeCompare(b) 的两倍。

关于javascript - 在字符串对象上调用 .localeCompare 和构造一个专用的 Intl.Collat​​or 对象之间的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993639/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com