JavaScript性能优化之循环操作

JavaScript中有四种不同类型的循环,for循环、do-while循环和while循环。(第四种类型为for-in循环,用于迭代对象的属性,本文不予讨论。)代码如下:

var values = [1, 2, 3, 4, 5];

//for 循环
for(var i=0; i<values.length; i++){
process(values[i]);
}

//do-while 循环
var j=0;
do{
process(values[j++]);
} while(j < values.length);

//while 循环
var k=0;
while(k < values.length){
process(values[k++]);
}

每个循环示例都会得到相同的结果:将values数组的所有条目传送到process函数。
仔细观察会发现,代码中每次循环执行都会调用 values.length 查看是否到达数组尾部。调用 values.length 查看数组长度是非常低效的,并且在循环执行中并不会改变values数组的长度。 通过使用本地变量替代属性查找将会提高循环的效率。

var values = [1,2,3,4,5];
var length = values.length;

//for 循环
for(var i=0; i<length; i++){
process(values[i]);
}

//do-while 循环
var j=0;
do{
process(values[j++]);
} while(j < length);

//while 循环
var k=0;
while(k < length){
process(values[k++]);
}

现在每个循环使用本地变量 length 替代了 values.length ,从而减少了每次循环执行中属性查找的时间。
另外一种简单的提升循环效率的方法是使用总长度向0递减的方法替代从0向总长度递增的方法

var values = [1,2,3,4,5];
var length = values.length;

//for 循环
for(var i=length; i--;){
process(values[i]);
}

//do-while 循环
var j=length;
do{
process(values[--j]);
} while(j);

//while 循环
var k=length;
while(k--){
process(values[k]);
}

条件修改为等于0后,每个循环的执行效率有了显著的提高。(当循环变量等于0时,条件判断为true)。
每种循环的执行效率都是相同的,所以你并不需要烦恼选择哪种循环方式效率最高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值