| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1676 人关注过本帖, 1 人收藏
标题:js 循环论
只看楼主 加入收藏
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
结帖率:80.91%
收藏(1)
 问题点数:0 回复次数:12 
js 循环论
闲来无事 根据最近项目经验 总结来一帖 今天跟大家说说我对JS优化循环的理解 废话少说 咱们开始
可以使用下面几种方式来优化循环
 •减值迭代
大多数循环使用一个从0开始、增加到某个特定值的迭代器,在很多情况下,从最大值开始,在循环中不断减值的迭代器更加高效
 •简化终止条件
 
由于每次循环过程都会计算终止条件,所以必须保证它尽可能快,也就是说避免属性查找或者其它的操作,最好是将循环控制量保存到局部变量中,也就是说对数组或列表对象的遍历时,提前将length保存到局部变量中,避免在循环的每
程序代码:
var list = document.getElementsByTagName('p');
        for (var i = 0; i < list.length; i++) {
            //……
        }
        //替换为:
        var list = document.getElementsByTagName('p');
        for (var i = 0, l = list.length; i < l; i++) {
            //……
        }
一步重复取值。
•简化循环体
 
循环体是执行最多的,所以要确保其被最大限度的优化
 •使用后测试循环
 
在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以,就应该尽量少用。for(;;)和while循环,while循环的效率要优于for(;;),可能是因为for
程序代码:
var arr = [1, 2, 3, 4, 5, 6, 7];
        var sum = 0;
        for (var i = 0, l = arr.length; i < l; i++) {
            sum += arr[i];
        }
        //可以考虑替换为:
        var arr = [1, 2, 3, 4, 5, 6, 7];
        var sum = 0, l = arr.length;
        while (l--) {
            sum += arr[l];
        }
(;;)结构的问题,需要经常跳转回去。
最常用的for循环和while循环都是前测试循环,而如do-while这种后测试循环,可以避免最初终止条件的计算,因此运行更快。



 
搜索更多相关主题的帖子: 最大值 项目经验 最好 color 
2015-05-21 14:47
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
程序代码:
//增值迭代 --效率较低
for(var i = 0;i < items.length;i++){
   doSomething(items[i]);
}
//减值迭代 --效率较高
for(var i = items.length - 1;i >= 0;i--){
   doSomething(items[i]);
}
减值迭代 不解释了 看代码 一眼便知

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-21 14:49
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
习惯问题 只有不断总结才能提高 例如如下代码
程序代码:
// 创建两个对象 ----不好的方式
//one 四条语句
var values = new Array();
values[0] = 123;
values[1] = 456;
values[2] = 789;
//two 四条语句
var person = new Object();
person.name = 'jozo';
person.age = 21;
person.sayName = function(){
    alert(this.name);
};

这样写没问题






出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-21 14:50
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
程序代码:
// 创建两个对象 ----推荐的方式
//one 1条语句
var values = [123,456,789]
//two 1条语句
var person = {
    name : 'jozo',
    age : 21,
    sayName : function(){
    alert(this.name);
};

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-21 14:51
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
但如果像上边这样写 则更有逻辑性

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-21 14:52
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
最后总结一下 一句话 我觉得代码的质量和数量就是性能的评判标准 下个月在来 社团就拜托大家了


[ 本帖最后由 wangnannan 于 2015-5-21 14:54 编辑 ]

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-21 14:52
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 6楼 wangnannan
社团的兄弟们进步好快啊!

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-05-21 15:08
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
var list = document.getElementsByTagName('p');
for (var i = 0, l = list.length; i < l; i++) {
    //……
}
进一步的优化方式
var i=0,list = document.getElementsByTagName('p'),len=list.length;
for (; i < len; i++) {
    //……
}
这样可以减少一次var声明,优化脚本加载的初始化时间,但这样做其实意义不大
有一种终极的优化方式,据说可以让for循环提高20%以上的速度,不过代码写起来麻烦一些,并且只有在大量循环时才需要

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-21 15:15
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 8楼 冰镇柠檬汁儿
非常想学习“有一种终极的优化方式”

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-05-21 15:20
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
var list = document.getElementsByTagName('p'), len = list.length, i = 0,
    x = len % 10, y = Math.floor(len / 10);
for(i = 0; i < x; i++) {
    // 首先将余数数量的记录循环
}
for (i = 0; i < y; i++) {
    abc(i, list);
    abc(i + 1, list);
    abc(i + 2, list);
    // 以此类推写10遍
}
function abc(i, list){
    //....
}

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-21 15:21
快速回复:js 循环论
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018242 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved