高性能Javascript循环语句和条件语句

高性能Javascript循环语句和条件语句
循环语句

众所周知,常用的循环语句,而DO-WHILE,和,foreach。除了在性能略低,foreach中,我们通常选择第一个三基于需求而不是性能的考虑。今天,我们将测试它们各自的性能,并告诉我们在最极端的情况下我们能做什么优化

首先让我们来谈谈为什么在foreach比others.for-in一般用在对对象的属性名称的遍历速度较慢,因为每个迭代也将搜索实例本身属性和原型链的属性,所以效率肯定是低的;而每一个基于迭代函数(特别注意的是,所有版本IE并不需要如果需要可以使用jQuery库的支持下,),使每项调用外部方法是架空的速度慢的主要原因

那么让我们看看,同时,在每一次迭代和DO-WHILE做。
VaR的长度= items.length;
对于(var i = 0;i <长度;i + +)
过程(项目{ });

var j=0;
同时(j <长度)
进程(项目{ + });

var = 0;
{做
进程(项目{ + });
}(k <长度);

在上面的每一个循环中,每次循环运行时都会产生这样的操作

在一个控制条件下的值的比较(i <长度)
控制条件的比较。结果是真的(我长度= TRUE)
一次自增运算(++)
主数组查找(项目{ })
一个函数调用过程(项目{ })
我们可以通过反转数组的顺序来改善循环性能。
对于(var i = items.length;我--;)
过程(项目{ });

var j = items.length;
(J)
进程(项目{ });

var k = items.length - 1;
{做
过程(项目{ });
}(k);

在这种情况下使用的反循环,并在整合下减法操作。现在每个控制只与0相比,控制条件和真正的价值,任何非零的数将被自动转换为真实的,和零等同于虚假的。事实上,控制条件是从两个比较(叠加代数是少于总数这是真的吗减少到比较(是真的吗)每次迭代从两个减少到一个,循环速度进一步改进。

性能测试:

事实真的如此吗真正的黄金不怕浏览器。测试代码非常简单,封装了8种功能,用于8种不同的情况(没有计时器Firefox不能打印配置文件信息,原因不明):
初始化数组
var = { };
var长度= 10;
对于(var i = 0;i <长度;i + +)
{ }=1;

功能for_in(){
var总和= 0;
为(var I)
总和= { };
}

功能for_each(){
var总和= 0;
a.foreach(功能(价值指数、阵列){
总和=值;
});
}

功能for_normal(){
var总和= 0;
对于(var i = 0;i <长度;i + +)
总和= { };
}

功能for_reverse(){
var总和= 0;
对于(var i =长度;i;;)
总和= { };
}

功能while_normal(){
var总和= 0;
var I=0;
同时(i <长度)
总和= { } + };
}

功能while_reverse(){
var总和= 0;
变量长度;
(i)
总和= { };
}

功能do_while_normal(){
var总和= 0;
var I=0;
{做
总和= { } + };
}(i <长度);
}

功能do_while_reverse(){
var总和= 0;
var i =长度- 1;
{做
总和= { };
}(i);
}

setTimeout(){()函数(
Console.profile();
for_in();
for_each();
for_normal();
for_reverse();
while_normal();
while_reverse();
do_while_normal();
do_while_reverse();
Console.profileEnd();
},1000);

当数组的长度为100时,我们发现Firefox的结果与预期的相似,并且对于每一个都是低效的,其效率比反向稍微高一些。

当数据量达到100W,Firefox和Chrome下的结果都是一样,人们想要什么,但他们都略有不同,在下FF的行为比每个,和在表现下,铬是有害的,并提出了一种直接的警告,虽然性能略有提高。反向迭代,但增加不多,和降低代码的阅读。
总结:

可以稍微提高反向迭代代码的性能,但牺牲可读性,除非追求极端性能优化的情况下还是没有必要的。
遍历数组可以使用一个公共循环,而不是用于每个和每个循环。
二、条件语句

常见的条件语句是如果有其他情况和开关情况,那么当什么时候使用,什么时候使用开关case语句

让我们看看一个简单的if语句的代码。
如果(值= 0){
返回result0;
{ { if(值= 1)
返回结果;
{ { if(值= 2)
返回2;
{ { if(值= 3)
返回结果;
{ { if(值= 4)
返回result4;
{ { if(值= 5)
返回结果;
{ { if(值= 6)
返回结果;
{ { if(值= 7)
返回结果7;
{ { if(值= 8)
返回result8;
{ { if(值= 9)
返回result9;
{人}
返回result10;
}
在最坏的情况下(值= 10),我们可能需要做出10个判断来返回正确的结果,那么我们如何优化代码呢一个明显的优化策略是预先判断最有可能的值,例如值最可能是5或10,然后两个判断提前,但通常我们不知道(最可能的选择),当我们可以使用两个树搜索策略来进行性能优化时。
如果(值< 6){
如果(值< 3){
如果(值= 0){
返回result0;
{ { if(值= 1)
返回结果;
{人}
返回2;
}
{人}
如果(值= 3){
返回结果;
{ { if(值= 4)
返回result4;
{人}
返回结果;
}
}
{人}
如果(值< 8){
如果(值= 6){
返回结果;
{人}
返回结果7;
}
{人}
如果(值= 8){
返回result8;
{ { if(值= 9)
返回result9;
{人}
返回result10;
}
}
}
经过优化,我们可以让最多4的判断,大大提高代码的性能。这种优化思想是两点查找有点相似的,类似的两点查找,只有当的值是一个连续的号码可以被优化。但写在这这样的代码是不利于维护。如果我们想添加一个条件或多个条件,我们需要重写许多代码。在那个时候,可以应用开关case语句。

用开关case语句重写上面的代码:
开关(值){
案例0:
返回result0;
案例1:
返回结果;
案例2:
返回2;
案例3:
返回结果;
案例4:
返回result4;
案例5:
返回结果;
案例6:
返回结果;
案例7:
返回结果7;
案例8:
返回result8;
案例9:
返回result9;
违约:
返回result10;
}
的开关情况语句使代码更具可读性,和使用case语句的好处是,如果多个值返回相同的结果,没有必要重写返回代码的一部分。一般来说,当案件数量达到一定的数量,使用case语句的效率高于如果别的,因为开关箱采用分表(分表)指标优化,当然,浏览器的优化程度也不同。

除了if else和开关的情况下,我们也可以使用查找表。
VaR结果= { result0,1,2,结果,result4,结果,结果,结果7,result8,result9。

返回正确的结果
返回结果{值};
当数据量较大时,查找表的效率一般高于if-else语句和使用情况报表。查找表可以通过数字和字符串进行索引,如果是字符串,最好使用对象而不是数组。当然,查找表的使用是有限的,每个案例的结果只能是一个值,而不是一系列操作。

总结:

当只有两个或两个值的值是连续数的时候,我们可以选择if语句。
当有3~10个格数和格值为非线性时,可以选择开关格语句。
当案例数量达到10以上时,我们可以选择查找表,结果只值一个值,而不是额外的Javascript语句。
以上是本文的全部内容,希望能对大家有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部