隨筆-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 金大為 閱讀(924) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 南安市| 广丰县| 垫江县| 屏东县| 郸城县| 昌图县| 巴楚县| 五河县| 府谷县| 靖西县| 水城县| 昌图县| 普陀区| 绩溪县| 常宁市| 来宾市| 江北区| 临朐县| 双城市| 平凉市| 和静县| 拜城县| 稻城县| 黑河市| 汉沽区| 冷水江市| 西平县| 读书| 赣州市| 沾益县| 定南县| 红桥区| 阿城市| 博爱县| 景洪市| 富宁县| 马公市| 米脂县| 和硕县| 开远市| 安塞县|