随笔-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 金大为 阅读(893) 评论(0)  编辑  收藏 所属分类: JavaScript

只有注册用户登录后才能发表评论。


网站导航: