优化循环结构

384 阅读1分钟

前言

循环是最耗费资源的操作,任意一个小小的损耗都会被成倍放大,从而影响程序整体运行的效率。有以下两个因素影响到循环的性能。

  1. 每次循环做什么。
  2. 循环的次数。

通过减少这两者中一个或全部的执行时间,可以提高循环整体性能。如果以此循环需要很长的时间,那么多次循环需要更长的时间

优化循环

普通写法

//遍历数组 方法1
arr=[2,34,65,323,45,34,43,435]
for(var i=0;i<arr.length;i++){
    console.log(arr[i])
}

//方法2
var j=0;
while(j<arr.length){
    console.log(arr[j++])
}

//方法3
var k=0;
do{
    console.log(arr[k++])
}while(k<arr.length)

优化写法

arr = [2, 34, 65, 323, 45, 34, 43, 435]

//方法1
for (var i = 0, len1 = arr.length;i<len;i++) {
    console.log(arr[i])
}

//方法2
var j=0,len2=arr.length;
while(j<len2){
    console.log(arr[j++])
}

//方法3
var k=0,len3=arr.length;
do{
    console.log(arr[k++])
}while(k<len3)

对于任何循环来说,每次执行循环体都要发生如下操作:

  1. 在控制条件中读取一次属性(arr.length)
  2. 在控制条件中执行一次比较(i<arr.length)
  3. 判断i<arr.length表达式的值是不是为true
  4. 一次自加操作(i++)
  5. 一次数组查找(arr[i])
  6. 一次控制台输出console.log(arr[i])

优化循环第一步是减少对象成员和数组查找的次数。在大多浏览器上,这些操作比访问局部变量或直接量需要更长的时间。例如,在上面的代码中,每次循环都要查找arr.length,这是一种浪费,因为该值在循环体执行过程不会改变,所以产生了不必要的性能损失。