隨筆-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 金大為 閱讀(922) 評論(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. 擴(kuò)大data的元素,因為采樣太小的話,隨機(jī)性較強
          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ù)  更多評論
            
          主站蜘蛛池模板: 阜平县| 策勒县| 临猗县| 思南县| 舒城县| 休宁县| 台南市| 河池市| 五河县| 长白| 和平区| 三门峡市| 泽普县| 高邑县| 石泉县| 曲水县| 梁平县| 湘潭县| 锡林浩特市| 福建省| 新竹县| 枣阳市| 溧阳市| 盐池县| 资溪县| 营口市| 威远县| 旌德县| 巨鹿县| 平江县| 恭城| 桐乡市| 礼泉县| 乌兰浩特市| 历史| 云和县| 庆安县| 竹山县| 济南市| 上虞市| 旌德县|