<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 金大為 閱讀(915) 評論(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循環,最常見的也就是對數組循環.所以我感覺我上面的測試還有有一定的常見性.
      回復  更多評論
      
    主站蜘蛛池模板: 成人午夜亚洲精品无码网站| 午夜一级毛片免费视频| 亚洲精品你懂的在线观看 | 亚洲国产人成在线观看69网站| 男女猛烈激情xx00免费视频| 亚洲国产精品视频| 四虎成人精品国产永久免费无码| 亚洲第一永久AV网站久久精品男人的天堂AV | 全黄性性激高免费视频| 国产亚洲福利精品一区二区| 四虎永久在线免费观看| 特级毛片A级毛片免费播放| 亚洲综合另类小说色区色噜噜| A国产一区二区免费入口| 久久精品国产69国产精品亚洲| 免费网站观看WWW在线观看| 亚洲日韩国产精品乱-久| 波霸在线精品视频免费观看| 亚洲女同成人AⅤ人片在线观看| 日韩精品无码免费视频| 亚洲日韩精品无码专区网址| 国产真人无码作爱视频免费| 亚洲精品456在线播放| 天天天欲色欲色WWW免费| 免费人成大片在线观看播放电影| 亚洲中文字幕日产乱码高清app | 处破女第一次亚洲18分钟| 亚洲午夜爱爱香蕉片| 日本免费中文字幕| 亚洲AV无码专区在线亚| 免费国产a国产片高清| 精品免费tv久久久久久久| 亚洲免费观看网站| 亚洲国产精品尤物YW在线观看| 久久青青草原国产精品免费| 亚洲另类视频在线观看| 亚洲av无码专区在线观看素人| 久久国产精品2020免费m3u8| 亚洲精华液一二三产区| 国产亚洲精品观看91在线| 免费黄色app网站|