翻译:疯狂的技术宅javascript
咱们都知道 for 循环比 each 或 javascript 函数更快,由于在javascript函数的引擎下可能会使用for循环或其余我不肯定的东西。我使用一个对象数组进行了一个简单的测试,并经过loop/for each/javascript 函数执行一些操做,并观察执行所需的时间。java
这些结果来自小例子,可能根据执行的操做和执行环境的选择而有所不一样。还与 VM 的选择有关。git
// calculated the sum of upVotes
const posts = [
{id: 1, upVotes: 2},
{id: 2, upVotes: 18},
{id: 3, upVotes: 1},
{id: 4, upVotes: 30},
{id: 5, upVotes: 50}
];let sum = 0;
console.time('reduce');
sum = posts.reduce((s, p)=> s+=p.upVotes,0);
console.timeEnd('reduce')sum = 0;
console.time('for loop');
for(let i=0; i<posts.length; i++) {
sum += posts[i].upVotes;
}
console.timeEnd('for loop');sum = 0;
console.time('for each');
posts.forEach(element => {
sum += element.upVotes;
});console.timeEnd('for each');
复制代码
注意:下面是结果列表,代码能够在 这里 找到。es6
Map/Reduce/Filter/Find 很慢的缘由有许多,其中有github
我找到了一个 库。从新实现几个常见的内置原生 JavaScript 函数。前端工程化
可是使用的原则不单单取决于性能,还有更多因素须要考虑,其中一些是:数组
就我的而言,我喜欢 map、reduce、filter 和 find,而且我也使用过很长一段时间。他们帮助我写出干净、精确、快速并符合我思路的点代码。当我别无选择时,会使用 for 循环。函数
就优化而言,map/reduce/filter/find 替换应该是最后的选择,或者根本就不是一个选项,其具体取决于你所需的优化级别。工具
注意:若是你正在使用循环,请始终用惯用方式使用,由于编译器如今可以以正确的方式去优化惯用循环
更新:你能够在这里找到大数据集和复杂计算的结果。