隨筆-57  評論-129  文章-0  trackbacks-0
          循環(huán)反轉(zhuǎn)示例:

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

          這類優(yōu)化的作用是明顯的,但是具體有多大作用呢?

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

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

          測試代碼:
          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 金大為 閱讀(917) 評論(5)  編輯  收藏 所屬分類: JavaScript

          評論:
          # re: javascript 性能測試系列:循環(huán)反轉(zhuǎn)的效果 2007-05-31 15:07 | MagicA
          是反轉(zhuǎn)產(chǎn)生的效果還是避免每次取length的效果?  回復(fù)  更多評論
            
          # re: javascript 性能測試系列:循環(huán)反轉(zhuǎn)的效果 2007-06-01 09:30 | DoubleHeart
          還真是執(zhí)行效率的差別,不是取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);


          執(zhí)行后,還是“反轉(zhuǎn)循環(huán)”后的執(zhí)行效率要高不少,IE下基本上維持在1:3,F(xiàn)F3beta版下基本上維持在1:2的情況(倒序:順序)。  回復(fù)  更多評論
            
          # re: javascript 性能測試系列:循環(huán)反轉(zhuǎn)的效果 2007-06-01 10:20 | MagicA
          that is an interesting topic, let's do more
          1. 擴大data的元素,因為采樣太小的話,隨機性較強
          2. 把取length的代碼放在前面,脫離計時區(qū)域
          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);  回復(fù)  更多評論
            
          # re: javascript 性能測試系列:循環(huán)反轉(zhuǎn)的效果 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--){

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

          不過對我來說,我一般懶得去申明那個變量,而且對于for循環(huán),最常見的也就是對數(shù)組循環(huán).所以我感覺我上面的測試還有有一定的常見性.
            回復(fù)  更多評論
            
          主站蜘蛛池模板: 宁安市| 安远县| 天等县| 六安市| 阿拉善右旗| 科尔| 双桥区| 承德市| 岑溪市| 奈曼旗| 花垣县| 东兴市| 梁平县| 青铜峡市| 临汾市| 清河县| 民权县| 宁国市| 金湖县| 三河市| 民丰县| 兴仁县| 平阳县| 依兰县| 马龙县| 静安区| 南开区| 宣恩县| 太仆寺旗| 于田县| 禄劝| 嘉祥县| 西乌| 闽清县| 长沙市| 四会市| 石阡县| 阿坝县| 赤水市| 广安市| 宜都市|