隨筆-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 金大為 閱讀(925) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 潜山县| 龙口市| 陕西省| 东山县| 高邮市| 延长县| 民丰县| 通榆县| 全州县| 成都市| 布拖县| 水富县| 灵武市| 普兰县| 仁怀市| 肥城市| 石台县| 五常市| 交城县| 贡嘎县| 常宁市| 法库县| 宽甸| 宜州市| 禄劝| 龙门县| 卢湾区| 同仁县| 临泉县| 桂林市| 洛隆县| 伊春市| 郑州市| 镇远县| 偏关县| 阜新| 赞皇县| 新余市| 莒南县| 大丰市| 乐平市|