各种迭代器性能差异的原因
Cause of performance difference in various iterators
在使用JavaScript的新数组函数时,我在以下代码中看到了一些主要的性能差异:jsfiddle:http://jsfiddle.net/jKUm5/
最慢for var i in array
(67.2ms(:
for (var a=0;a<amount;a++) {
for (var b in arr) {
arr[b]++;
}
}
JS 5.1 array.forEach
(2.1ms(:
for (var c=0;c<amount;c++) {
arr.forEach(function(e,i,a) {
arr[i]++;
});
}
最快(默认(for var i=0;i<array.length;i++
(1.1ms(:
for (var d=0;d<amount;d++) {
for (var e=0;e<arr.length;e++) {
arr[e]++;
}
}
我认为使用for var i in array
而不是默认值是一个很好的做法,但似乎默认值是最快的!
我的主要问题是:
for var i in array
性能不佳的原因是什么- 默认迭代器和新迭代器之间有什么区别(有什么必要使用另一个迭代器方法(
for-in
循环迭代对象上的所有属性,而不仅仅是数组值。因此,它必须从对象中检索这些属性值,而不是像其他两种方法那样只生成数组索引。除了迭代数组的方式错误之外,它的速度慢也不足为奇。但不管速度如何,迭代数组的方式都是错误的。如果有人向Array
原型添加了一个可迭代的方法或属性,那么该属性将显示在for-in
数组迭代中。
.forEach()
是为了方便,有时回调创建的闭包也很方便(尤其是当您想在异步回调中访问数组索引时(。它可能更慢,因为它涉及到每次迭代都有参数的函数调用,而第三种方法在每次迭代中没有额外的函数调用。
仅供参考,.forEach()
方法是Firefox中三种方法中速度最慢的,因此这也因浏览器而异。
相关文章:
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 从两个基于0的for循环迭代器中获取单个基于0的索引的公式
- Rails:试图在javascript(Google Charts API)中嵌入一个adv-ruby(each+迭代器
- 在javascript中,从迭代器创建Array
- Javascript中的迭代器和生成器
- 从迭代器/生成器中获取单个yield值
- 迭代器和可迭代之间的区别
- 文件夹迭代器中的Google驱动器文件迭代器
- DOM:如何根据迭代器值设置元素宽度并在mouseover上调用函数
- javascript中多维数组的迭代器
- 迭代Promise迭代器的非递归方法
- 循环中的Node.js回调具有错误的迭代器值
- underscore.js,迭代器引用错误
- 去掉foreach中的自定义绑定以获取迭代器
- 迭代器中的return element.parentNode
- 如何使用量角器+angular获取迭代器索引/键
- 在jquery each()迭代器函数中访问JS对象
- jQuery 改进表迭代器
- jquery map 数组在迭代器中返回 NaN
- 各种迭代器性能差异的原因