提高javascript性能之 条件语句
来源:互联网 发布:js 代码整理 编辑:程序博客网 时间:2024/06/05 09:31
本内容来自:《高性能javascript》一书,感觉写的很好摘录下来分享给大家
条件表达式决定了JavaScript程序的流向。其他语言对应该使用if-else语句还是switch语句的传统观点同样适用于JavaScript。由于不同的浏览器针对流程的控制进行了
不同的优化。因此使用哪种技术更好没有定论。
1、if-else对比switch
使用if-else还是switch,最流行的方法是基于测试条件的数量来判断:条件数量越大,越倾向于switch而不是if-else。这通常归结于代码的易读性。这个观点认为,当
循环条件较少时if-else更易读,当条件数量较多时switch更易读。考虑如下代码:
if(found){ //代码处理}else(){ //其他代码处理}switch(found){ case true: //代码处理 break; default: //其他代码处理}尽管两块代码完成的是相同的任务,但还是有很多人认为if-else语句比switch更容易度。然而,如果增加条件语句的数量,这种观点会被扭转过来:
if(color == 'red'){ //代码处理}else if(color == 'blue'){ //代码处理}else if(color == 'brown'){ //代码处理}else if(color == 'black'){ //代码处理}else { //代码处理}switch(color){ case 'red': //代码处理 break; case 'blue': //代码处理 break; case 'brown': //代码处理 break; case 'black': //代码处理 break; default : //代码处理}大多数人会认为对于这段代码,switch表达式比if-else表达式可读性更好。
事实证明,大多数情况下switch比if-else运行的要快,但只有当条件数量很大时才能快得明显。这个两个语句主要性能区别是:当条件增加时,if-else性能负担增加的程度比switch要多。
因此,我们自然倾向于在数量较少是使用if-else,而在条件数量较大时使用switch。这从性能方面考虑也是合理的。
通常来说,if-else适用于判断两个离散值或几个不同的值域。当判断多有两个离散值时,switch语句是更佳选择。
2、优化 if-else
优化if-else的目标是:最小化到达正确分支前所需判断的条件数量。最简单的优化方法是确保最可能出现的条件放到首位。考虑如下代码:
if(value < 5){ //代码处理}else if(value > 5 && value < 10){ //代码处理}else{ //代码处理}该段代码只有当value值经常小于5时才是最优的。如果value大于5或者等于10,那么每次到达正确分支之前必须经过两个判断条件。最终增加了这个语句的所消耗的平均时间。if-else中的条件
语句总应该是按照从最大概率到最小概率的顺序排列,以确保运行速度最快。
另一种减少条件判断次数的方法是把if-else组织成一系列嵌套的if-else语句。使用单个庞大的if-else通常会导致运行缓慢,因为每个条件都学要判断。例如:
if(value == 0){ return result0;}else if(value == 1){ return result1;}else if(value == 2){ return result2;}else if(value == 3){ return result3;}else if(value == 4){ return result4;}else if(value == 5){ return result5;}else if(value == 6){ return result6;}else if(value == 7){ return result7;}else if(value == 8){ return result8;}else if(value == 9){ return result9;}else if(value == 10){ return result10;}在这个if-else表达式中,条件语句最多判断10次。假设value的值在1到10之间均匀分布。那么这会增加平均运行时间。为了最小化条件判断次数,代码可重写为一系列嵌套的if-else语句,比如:
if(value < 6){ if(value < 3){ if(value == 0){ return result0; }else if(value == 1){ return result1; }else{ return result2; } }else{ if(value == 3){ return result3; }else if(value == 4){ return result4; }else { return result5; } }}else{ if(value < 8){ if(value == 6){ return result6; }else{ return reuslt7; } }else{ if(value == 8){ return result8; }else if(value == 9){ return result9; }else{ return result10; } }}重写后的if-else语句每次到达正确分支最多经过4次条件判断。它使用二分法把值域分成一系列的区间,然后逐步缩小范围。当值的范围均匀分布在0到10之间时,代码运行的平均时间大约是前面例子的一半。
这个方法非常适用于有多个值域需要测试的时候(如果是 离散值,那么switch语句通常更为合适)。
- 提高javascript性能之 条件语句
- JavaScript条件语句的性能问题
- JavaScript快速上手之7:条件语句
- JavaScript之条件表达式性能影响
- sql语句性能提高
- sql语句性能提高
- sql语句性能提高
- sql语句性能提高
- sql语句性能提高
- sql语句性能提高
- sql语句性能提高
- SQL语句提高性能
- 提高 web 应用性能之 JavaScript 性能调优
- 提高 web 应用性能之 JavaScript 性能调优
- 提高 web 应用性能之 JavaScript 性能调优
- 提高 web 应用性能之 JavaScript 性能调优(转)
- 提高 web 应用性能之 JavaScript 性能调优
- 提高 web 应用性能之 JavaScript 性能调优
- 笑对人生的xp
- 关于DEV皮肤的换肤 也是系统风格的代码 C#
- Android low memory killer 详解
- 发送消息,避免数据损失 --数据库维护经验一则
- AT&T汇编与gcc内联汇编
- 提高javascript性能之 条件语句
- Connection Shareable测试
- 在oracle中,用union合并blob类型
- Linux内核实践 - 如何添加网络协议[三]:实现
- Android的对话框----(Dialog)
- 如何保留低端内存
- 扩展OutputDebugString,自定义Trace
- 转折-JQ
- Select For update语句浅析