一、嵌套for循环--外小内大原则
//优化前
for(var j=0;j<100;j++{
for(var i=0;i<10;i++){
}
}
//优化后
for(var i=0;i<10;i++){
for(var j=0;j<100;j++){
}
}
二、消除循环终止判断时的方法调用
/* 优化前 */
for(var i=0;i<arr.length;i++){
}
/* 优化一 将arr.length的计算提取到循环外*/
var len=arr.length;
for(var i=0;i<len;i++){
}
优点:不必每次都计算 list 的长度
缺点:m 的作用域不够小,违反了最小作用域原则。
不能在 for 循环中操作 list 的大小,比如除去或新加一个元素
/* 优化二 增加一步对arr.length的计算*/
for(var i=0;len=arr.length;i<len;i++){
}
优点:不必每次都计算,变量的作用域遵循最小范围原则。
/* 优化三 采用倒序写法*/
for(var i=arr.length-1;i>0;i--){
}
优点:不必每次都计算,变量的作用域遵循最小范围原则。
缺点: 结果的顺序会反 。
看起来不习惯,不易读懂。
三、循环嵌套,提取不必要的循环
var a,b;
for(var i=0;i<10;i++){
i=i*a*b
}
/* 优化 */
var c=a*b;
for(var i=0;i<10;i++){
i=i*c
}
优点:代码中 a*b 与循环无关,为避免重复计算,应该把它放到外面。
四、异常处理写在循环外面
/* 优化前 */
for(var i=0;i<10;i++){
try{ }
catch(Exception e){
}
}
/* 优化后 */
try{
for(var i=0;i<10;i++){
}
}
catch(Exception e){ }
说明:捕获异常是很耗资源的,所以不能将 try catch 放到循环内部,优化后同样有好几个数量级的提升。