隨筆-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
          主站蜘蛛池模板: 乌拉特后旗| 中超| 抚顺县| 新野县| 廊坊市| 周宁县| 黄浦区| 沅江市| 黑河市| 汤原县| 来安县| 邢台县| 绥德县| 宁津县| 科技| 衡南县| 安徽省| 元谋县| 宁阳县| 昌吉市| 荥阳市| 大竹县| 伊金霍洛旗| 加查县| 深水埗区| 从化市| 广州市| 泾阳县| 保亭| 隆德县| 武安市| 双江| 卢龙县| 且末县| 丰都县| 西平县| 桐城市| 临漳县| 罗江县| 德州市| 交城县|