- for
- do-while
- while
- for-in:枚举任何对象的命名属性,包括实例属性和原型链继承的属性,相对上面三个循环慢,若需迭代一个有限已知的属性列表,其他循环更快
循环需要注意影响性能的地方:
- 迭代次数
- 迭代处理
性能优化:
- 缓存数组长度
- 倒序循环,控制条件与0比较,相当于控制条件与true比较,非零数字自动强制转换为true
- 减少迭代次数,达夫设备,在一次迭代中执行多次迭代操作
var iterations = Math.floor(items.length / 8),
startAt = items.length % 8,
i = 0;
do {
switch(startAt){
case 0: process(items[i++]);
case 7: process(items[i++]);
case 6: process(items[i++]);
case 5: process(items[i++]);
case 4: process(items[i++]);
case 3: process(items[i++]);
case 2: process(items[i++]);
case 1: process(items[i++]);
}
startAt = 0;
} while (--iterations);
var i = items.length % 8;
while(i){
process(items[i--]);
}
i = Math.floor(items.length / 8);
while(i){
process(items[i--]);
process(items[i--]);
process(items[i--]);
process(items[i--]);
process(items[i--]);
process(items[i--]);
process(items[i--]);
process(items[i--]);
}
js数组的forEach,遍历一个数组的所有成员,并在每个成员上执行一个函数,每个元素上执行的函数作为forEach的参数传入进去,因为每个数组要关联额外的函数调用,造成速度慢
items.forEach(function(value, index, array){
process(value);
});