问题来源于jqueryAPI

原文:

Iteration

An array has a length property that is useful for iteration:

for ( var i = 0; i < a.length; i++ ) {
// Do something with a[i]
}

When performance is critical, reading the length property only once can help to speed things up.

This should be used only when a performance bottleneck was discovered:

for ( var i = 0, j = a.length; i < j; i++ ) {
// Do something with a[i]
}

Another variation defines a variable that is filled for each iteration, removing the array-notation from the loop-body. It does not work when the array contains 0 or empty strings!

for ( var i = 0, item; item = a[i]; i++ ) {
// Do something with item
}

总共有三种循环写法,分别于chrome下累加测试:

<button onclick="test1()">开始计时1</button>
<button onclick="test2()">开始计时2</button>
<button onclick="test3()">开始计时3</button>
<script>
var a=[],date1,date2,date;
for(var i= 0;i<100000000;i++){
a.push(parseInt(Math.random()*10000000)+1);
}
console.log(a.length);
function test1() {
date1=new Date().getTime(); for(var i= 0,sum=0;i<a.length;i++){
sum+=a[i]
} date2=new Date().getTime();
date=date2-date1;
console.log("第一种方法"+date+"毫秒"+sum);
}
function test2() {
date1=new Date().getTime(); for(var i= 0,sum=0,item1=a.length;i<item1;i++){
sum+=a[i]
} date2=new Date().getTime();
date=date2-date1;
console.log("第二种方法"+date+"毫秒"+sum);
}
function test3() {
date1=new Date().getTime(); for(var i= 0,sum=0,item2;item2=a[i];i++){
sum+=item2;
} date2=new Date().getTime();
date=date2-date1;
console.log("第三种方法"+date+"毫秒"+sum);
} </script>

控制台输出结果:

第一种方法401毫秒499988949879357
第二种方法386毫秒499988949879357
第三种方法387毫秒499988949879357 第一种方法391毫秒499988949879357
第二种方法386毫秒499988949879357
第三种方法387毫秒499988949879357 第一种方法417毫秒499988949879357
第二种方法390毫秒499988949879357
第三种方法394毫秒499988949879357

后两种方法速度略快,应该是省了length获取时间;

如果把第一种i++变成i--,循环体反过来写,是不是能达到类似的效果,测试代码:

第一种方法400毫秒499988167511348
第二种方法394毫秒499988167511348
第三种方法398毫秒499988167511348
第四种方法416毫秒499988167511348 第一种方法402毫秒499988167511348
第二种方法397毫秒499988167511348
第三种方法411毫秒499988167511348
第四种方法401毫秒499988167511348 第一种方法394毫秒499988167511348
第二种方法392毫秒499988167511348
第三种方法390毫秒499988167511348
第四种方法400毫秒499988167511348

测试结果甚至与前一次测试发生了冲突,尝试扩大样本内容/循环体复杂化,提高误差,然而chrome崩溃了。

这次测试也不是毫无结果,至少如jqueryAPI原文说的,性能提升确实有限,性能达到瓶颈时可以尝试。

【JS】FOR循环通关只循环一次length提高性能的更多相关文章

  1. for循环,for…in循环,forEach循环的区别

    for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...

  2. js中的分支与循环

    一.js的分支结构 js的分支结构包括:if-else结构.多重if结构.嵌套if结构和switch-case结构 1.if-else结构 1.结构的写法:    if(判断条件){    //条件为 ...

  3. js for等循环 跳出多层循环

    js for 循环 跳出多层循环 ,,,,,,,]; // 8个数 ,,,,,,,]; //8个数 testFor(); console.log(') function testFor() { ;k& ...

  4. 前端(十二)—— JavaScript基础操作:if语句、for循环、while循环、for...in、for...of、异常处理、函数、事件、JS选择器、JS操作页面样式

    JavaScript基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通 ...

  5. js模版引擎handlebars.js实用教程——each-基本循环使用方法

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  6. JS脚本语言里的循环

    js脚本语言:  循环:(循环操作某一个功能(执行某段代码)) 四要素: 循环初始值  循环条件  状态改变  循环体 for(穷举  迭代) while 举例:(穷举) 与7相关的数 <scr ...

  7. 【js jQuery】map集合 循环迭代取值---以及 map、json对象、list、array循环迭代的方法和区别

    后台给前台传来一个map @ResponseBody @RequestMapping(value = "getSys") public Map<Long,String> ...

  8. MySql 存储过程 光标只循环一次

    [1]MqSql 存储过程 光标只循环一次 针对MySql存储过程,光标只循环一次就退出的场景,可能原因分析: (1)存储过程有问题(仔细检查语法.控制变量.条件等等) (2)保证存储过程正确.调用过 ...

  9. [转]如何在 JS 代码中消灭 for 循环

    一,用好 filter,map,和其它 ES6 新增的高阶遍历函数 二,理解和熟练使用 reduce 三,用递归代替循环(可以break!) 四,使用高阶函数遍历数组时可能遇到的陷阱 五,死磕到底,T ...

随机推荐

  1. java IO学习

    1.如何将byte[]转换为String byte byt[] = new byte[1024]; int b = file.read(byt); //b是byt的实际读取到的长度 String st ...

  2. android异常: java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused

    android手机做下载文件时,报了如下异常: java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused 模拟器 ...

  3. ros语音交互(四)移植科大讯飞语音识别到ros

    将以前下载的的语音包的 samples/iat_record/的iat_record.c speech_recognizer.c speech_recognizer.c 拷贝到工程src中, linu ...

  4. 使用php-cs-fixer格式化你的代码

    在开发中,我们会有意识的遵行一套规范来保证团队代码的一致性.PSR是我们PHP遵循的共同规范. 在这里,推荐一个代码格式化工具php-cs-fixer,可以一键把代码格式化为PSR-2的标准. 安装: ...

  5. Struts2配置文件详解

    解决在断网环境下,配置文件无提示的问题我们可以看到Struts.xml在断网的情况下,前面有一个叹号,这时,我们按alt+/ 没有提示,这是因为” http://struts.apache.org/d ...

  6. 如何解决前端传来的时间格式与mysql表中时间格式不匹配的查询问题

    前端传过来的时间格式为“2016-07-11 11:13:10”,而数据表中对应字段`add_time`的格式为“2016-7-11”,此时sql不能直接用 "where `add_time ...

  7. GridView获取列子段的几种途径

    GridView是ASP.NET中功能强大的数据显示控件,它的RowDataBound事件为我们提供了方便的控制行.列数据的途径. 要获取当前行的某个数据列,我在实践中总结有如下几种方法: 1. Ce ...

  8. C# winform 模拟键盘鼠标操作

    1.获取鼠标位置 private void timer1_Tick(object sender, EventArgs e) { // timer1.Stop(); // int x = Control ...

  9. listview指定某item的点击效果

    需求:listview的某些item能够点击,需要点击效果,有些item不能点击,需要屏蔽点击效果. 实现: 1.layout: <ListView android:id="@+id/ ...

  10. HalconMFC(一)之多版本配置

    今天比较匆忙,还得写周六日考试扯P的PPT,就先这样开个头吧.我的电脑是win7,32位的系统,我用Halcon10.0.但是很多小伙伴的都是64位系统的,所以我用小伙伴的64位系统试过很多次用VC配 ...