javascript 性能测试系列:正则表达式

javascript 性能测试系列:正则表达式
在 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)

你可能感兴趣的:(javascript 性能测试系列:正则表达式)