if-else 和 switch 语句优化
1、if-else 对比 switch
条件数量越大,越频向于使用 switch 而不是 if-else。
条件较少时 if-else 更易读,相反 switch 更易读
2、优化 if-else
i、最小化到达正确分支前所有需要的判单条件数量,最简单的方法确保最可能出现的条件放在首位。
例如:
if(value<5){
//代码处理
}else if(value >5 && value<10){
}else{
}
if-else 中的条件语句应该总是按照从最大概率到最小概率的顺序排列,以确保运行速度最快。
ii、将if-else 组成一系列嵌套的if-else 语句。
例如如下代码:
if (vlaue === 0) { return return0; } else if (value === 1) { return return1; } else if (value === 2) { return return2; } else if (value === 3) { return return3; } else if (value === 4) { return return4; } else if (value === 5) { return return5; } else if (value === 6) { return return6; } else if (value === 7) { return return7; } else if (value === 8) { return return8; } else if (value === 9) { return return9; } else { return return10; }
以上条件语句最多要判断10次。假设 value 的值在 0 到 10 之间均匀分布,会增加平均运行时间。
优化之后的代码:
if (value < 6) { if (value < 3) { if (vlaue === 0) { return return0; } else if (value === 1) { return return1; } else { return return2; } } else { if (value === 3) { return return3; } else if (value === 4) { return return4; } else { return return5; } } } else { if(value<8){ if (value === 6) { return return6; } else { return return7; } }else{ if (value === 8) { return return8; } else if(value===9) { return return9; }else{ return return10; } } }
优化之后的代码使用 二分法把值域分成一系列的区间,然后逐步缩小范围。代码运行的平均时间大约是前面列子的一半。
iii、当有大量离散值时,if-else 和switch 比使用查表慢很多。
例如:
switch (value) { case 0: return return0; case 1: return return1; case 2: return return3; case 3: return return3; case 4: return return4; case 5: return return5; case 6: return return6; case 7: return return7; case 8: return return8; case 9: return return9; default: return return10; }
优化如下:
var results=[return0,return1,return2,return3,return4,return5,return6,return7,return8,return9,return10] return results[value]
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号