隨筆-57  評論-129  文章-0  trackbacks-0
          JSI的實現中,有這樣一種需求,將有自帶命名空間的腳本元素名數組轉換成沒有命名空間的變量名數組.
          比如 :
          ['YAHOO.util.XXXX,YAHOO.util.YYYY,YAHOO.event.XX'] ->['YAHOO']

          以前一直是較長的一段處理代碼,今天突發奇想,這個用正則表達式處理效果如何?

          于是,就這種處理,分別測試了正則表達式和javascript代碼的效率.

          測試數據如下(regTime /codeTime):
          620/4536
          729/4068
          719/4250
          645/4152
          655/4642

          FF和IE結果差不多,上面是FF2的數據

          總結:
          經常看見很多地方對正則表達式的效率的懷疑,但是這個問題放在javascript里面,好像情況又不同了. 適當使用正則式,反而可以大大提高效率.
          在javascript這類\較慢的解釋型語言里面,少即快,能用原生代碼就不要自己寫.

          測試代碼:
          var data = [];
          for(var i = 0;i<20;i++){
            data[i] 
          = "NS"+i/10+'.'+i
          }
          document.write(
            
          //(data == data.sort()) +"/"+
            data +"<hr>")
          var i = 0;
          var regTime = 0;
          var codeTime = 0;
          var inc = 0;
          var reg = /(\b[\$\w]+)[\$\w\.]*(,\1\b[\$\w\.]*)*/g;

          var regResult,codeResult;
          while(inc++<100){
            
          var i=0;
            
          var t1 = new Date();
            
          while(i++<100){
              regResult 
          = data.join(',').replace(reg,'$1').split(',');
            }

            
          var t2 = new Date();
            
          while(i++<200){
              codeResult 
          = [];
              
          var flagMap = {};
              
          for(var j=data.length-1;j>=0;j--){
                key 
          = data[j];
                key 
          = key.substr(0,key.indexOf('.'));
                
          if(!flagMap[key]){
                  codeResult[codeResult.length] 
          = (key);
                  
          //codeResult.push(key);
                  flagMap[key] = true;
                }
              }
            }
            
          var t3 = new Date();
            regTime 
          +=(t2-t1);
            codeTime
          +=(t3-t2);
          }
          document.write(
            
          "regResult:"+
            regResult)
          document.write(
            
          "<hr>codeResult:"+
            codeResult)
          prompt(
          "regTime /codeTime",regTime  +'/'+codeTime)

          posted on 2007-05-30 13:22 金大為 閱讀(919) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 新津县| 海安县| 郓城县| 通江县| 平舆县| 乌鲁木齐市| 无锡市| 临桂县| 临武县| 日照市| 牡丹江市| 富锦市| 大宁县| 富平县| 梁山县| 铁力市| 左贡县| 萍乡市| 司法| 麻城市| 商洛市| 汶上县| 巴中市| 阿坝| 鹤岗市| 犍为县| 永寿县| 江源县| 寿光市| 宝兴县| 维西| 房产| 介休市| 连城县| 夏邑县| 广水市| 鹤岗市| 扶余县| 石嘴山市| 理塘县| 唐河县|