哪个是性能更高的array.includes或string.includes?

时间:2017-06-27 04:28:59

标签: javascript arrays string performance

我试图找出哪个更具性能:

let array = [1,2,3,4]
array.includes(4)

let str = "1234";
str.includes(4);

并试图通过执行:

找到它
console.time();
let ar = [1,2,3,4,5];
ar.includes(4);
console.timeEnd();

console.time();
let str = "12345";
str.includes("4");
console.timeEnd();

在控制台中和页面内的脚本中。当从控制台直接执行时,时间是这样的,array.includes占用的时间最少。从页面执行时,报告的时间使得string.includes花费的时间更少。是什么给了什么?!

3 个答案:

答案 0 :(得分:6)

使用少量值进行测试

结论:array.includesstring.includes

更快

然后我尝试将值的数量增加到~100

结果相同:array.includesstring.includes

如果您对实现算法感兴趣,可以在这里查看:

PS:在你的情况下,我认为变量声明在Array Incldues测试中比在字符串声明中花费更多时间。如果您将声明移出计时器,您还应该看到一致的结果。

证明:Proof

字符串声明占用声明数组所需的时间的1/10

答案 1 :(得分:2)

基于不同浏览器平台上的基准测试,这一切都取决于该平台上的Javascript引擎和运行时元素(Windows,Mac或Ubuntu)

Mac OS上的Chrome在Safari Mac OS上的速度比Array.includesString.includes。(jsperf.com测试用例由 @shashanka n 创建)

和Mac OS string.includes上的Node v8.0.0似乎比Array.includes快,结果如下

enter image description here

节点测试用例源代码:

let ar = [1,2,3,4,5];
console.time("Array");
ar.includes(4);
console.timeEnd("Array");

let str = "1,2,3,4,5";
console.time("String");
str.includes("4");
console.timeEnd("String");

Chrome上的上述测试用例 enter image description here

有时测试用例歧义可能会导致不同的结果。没有明确的方法来确定API的性能,我们只需要花费几毫秒的时间就可以使用它,直到真正重要或者阻碍大规模的性能为止。

答案 2 :(得分:0)

我使用字符串而不是数字进行了测试,因为一个重要因素是数字/字符串转换

array.includes vs string.includes comparison

数组仍然要快得多...

这是我的2个测试用例

var ar = ['a','b','c', 'd', 'e'];
var str = "abcde";

jsFiddle test