<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-57  評論-129  文章-0  trackbacks-0
    循環反轉示例:

      for(var i = 0;i<data.length;i++){
        
    //.
      }
      
    //反轉后代碼
      for(var i = data.length-1;i>=0;i--){
        
    //.
      }

    這類優化的作用是明顯的,但是具體有多大作用呢?

    用一個長度為100 000 的數組測試一下:
    515/313
    500/313
    516/312
    516/328
    516/328

    可見,循環反轉后,只需要原來3/5的時間.
    但是,這種東西到底有多大價值?FF上200次循環僅需要1毫秒的時間.所以,個人認為,只要循環的內容不是太長,使用不算非常頻繁,那么沒有太大必要.
    加入循環的長度需要通過函數取得,且不變,那么,反轉的效率還是可觀的,在IE上,函數調用消耗是普通操作的十多倍.

    測試代碼:
    var incTime = 0;
    var decTime = 0;
    var inc = 0;
    var data = new Array(10*10000);
    //while(inc++<50)
    {
      
    var t1 = new Date();
      
    for(var i = 0;i<data.length;i++){
      }
      
    var t2 = new Date();
      
    for(var i = data.length-1;i>=0;i--){
      }
      
    var t3 = new Date();
      incTime
    +=(t2-t1);
      decTime
    +=(t3-t2);
    }

    prompt(
    "incTime/decTime",incTime +'/'+decTime)


    posted on 2007-05-31 12:30 金大為 閱讀(916) 評論(5)  編輯  收藏 所屬分類: JavaScript

    評論:
    # re: javascript 性能測試系列:循環反轉的效果 2007-05-31 15:07 | MagicA
    是反轉產生的效果還是避免每次取length的效果?  回復  更多評論
      
    # re: javascript 性能測試系列:循環反轉的效果 2007-06-01 09:30 | DoubleHeart
    還真是執行效率的差別,不是取length的差別
    我把代碼改成這樣:

    var incTime = 0;
    var decTime = 0;
    var inc = 0;
    var data = new Array(10*10000);
    //while(inc++<50)
    {
    var t1 = new Date();
    for(var i = 0, num = data.length; i < num; i++){
    }
    var t2 = new Date();
    for(var i = data.length-1; i >= 0; i--){
    }
    var t3 = new Date();
    incTime+=(t2-t1);
    decTime+=(t3-t2);
    }

    alert("incTime/decTime => " + incTime +'/'+decTime);


    執行后,還是“反轉循環”后的執行效率要高不少,IE下基本上維持在1:3,FF3beta版下基本上維持在1:2的情況(倒序:順序)。  回復  更多評論
      
    # re: javascript 性能測試系列:循環反轉的效果 2007-06-01 10:20 | MagicA
    that is an interesting topic, let's do more
    1. 擴大data的元素,因為采樣太小的話,隨機性較強
    2. 把取length的代碼放在前面,脫離計時區域
    3. 試著顛倒兩個for的順序
    then you get the following conclusion
    . they are almost the same

    have a try

    ------------------------------------------------
    var incTime = 0;
    var decTime = 0;
    var inc = 0;
    var data = new Array(100*10000);
    //while(inc++<50)
    {
    var len = data.length;
    var t1 = new Date();
    for(var i = len; i > 0; i--){}
    var t2 = new Date();
    for(var i = 0; i < len; i++){}
    var t3 = new Date();
    incTime+=(t2-t1);
    decTime+=(t3-t2);
    }

    alert("incTime/decTime => " + incTime +'/'+decTime);  回復  更多評論
      
    # re: javascript 性能測試系列:循環反轉的效果 2007-06-01 17:22 | 金大為
    @DoubleHeart
    for(var i = 0, num = data.length; i < num; i++){
    }
    var t2 = new Date();
    for(var i = data.length-1; i >= 0; i--){

    你這樣是少取了一次屬性,但是,你還是取了一次變量,取變量估計也要比常量耗時的:)  回復  更多評論
      
    # re: javascript 性能測試系列:循環反轉的效果 2007-06-03 18:40 | 金大為
    @emu
    挑刺專家啊,你說的沒錯:

    不過對我來說,我一般懶得去申明那個變量,而且對于for循環,最常見的也就是對數組循環.所以我感覺我上面的測試還有有一定的常見性.
      回復  更多評論
      
    主站蜘蛛池模板: 理论秋霞在线看免费| 亚洲AV无码资源在线观看| 成人免费一区二区三区| 亚洲色欲久久久久综合网| 国产亚洲精品美女| 四虎影视在线永久免费观看| 国产AV无码专区亚洲AV琪琪| 国产国产人免费视频成69大陆| 亚洲AV无码专区在线电影成人| 国产成人精品免费直播| 草久免费在线观看网站| 亚洲国产精品成人久久蜜臀 | 国产精品V亚洲精品V日韩精品| 免费看美女午夜大片| 亚洲精品国产日韩无码AV永久免费网 | 久久亚洲国产精品五月天婷| a级毛片免费高清视频| 亚洲精品乱码久久久久66| 手机看片国产免费永久| 亚洲熟妇av一区| 成人无码区免费A片视频WWW| 亚洲av成人一区二区三区在线播放| 日韩一品在线播放视频一品免费| 免费人成再在线观看网站| 亚洲色大成网站www永久一区| 无码国产精品一区二区免费式芒果 | 亚洲色婷婷综合开心网| 久久精品成人免费看| 亚洲av午夜精品无码专区| 国产乱子伦片免费观看中字| aaa毛片免费观看| 亚洲乱码一区av春药高潮| 免费永久看黄在线观看app| 日本高清不卡aⅴ免费网站| 亚洲精品人成电影网| 免费一级成人毛片| 一区二区免费视频| 精品亚洲成A人在线观看青青 | 亚洲福利视频一区二区三区| 日韩中文字幕在线免费观看| 一个人看的www免费视频在线观看|