更快的循环:foreach 与 some(jsperf 的性能与 Node 或 chrome 不同)

2024-04-19

将数组的值恢复为简单的最佳方法是什么true or false values.

我很困惑,因为 jsperf 给了我VERY与 google chrome 控制台、nodejs 或任何其他 JS 引擎给我的结果不同。 (jsperf 片段在这里 https://jsperf.com/foreach-vs-some-js)

这是代码片段,您可以看到(您可以在此处运行它)some比使用a快100倍foreach loop

var array = [];
var i = 0;
var flag = false;
while (i< 100000) {
    array.push(Math.random()*10000);
    i++;
}

console.time('forEach');
array.forEach((item) => {

    if (!flag && item > 10000/2) {
        flag = true;
        return;
    }
    return false
});
console.timeEnd('forEach');
console.log(flag);

flag = false;
console.time('some');
flag = array.some((item) => {

    if (item > 10000/2) {
        return true;
    }
    return false
});
console.timeEnd('some');
console.log(flag);

问题是,为什么 JSPERF 给出的结果与 chrome 的控制台、nodejs 或任何其他 JS 引擎不同?

编辑: 正如我对下面问题的回答所述,这种行为是有问题的,因为使用 JSPERF 时我打开了 chrome 开发工具,并且所有消息都被记录到控制台,这意味着结果实际上发生了变化。 请记住,将来,当执行时保持控制台打开时,JSPERF 可能无法正常运行。


from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

除了通过以下方式之外,没有其他方法可以停止或中断 forEach() 循环 抛出异常。

using a foreach,循环将恰好执行 100000 次。 使用some,一旦你的谓词返回 true,循环就会停止。

只要你的谓词有可能为真,some会更有效率

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更快的循环:foreach 与 some(jsperf 的性能与 Node 或 chrome 不同) 的相关文章

随机推荐