在
JSI的實(shí)現(xiàn)中,有這樣一種需求,將有自帶命名空間的腳本元素名數(shù)組轉(zhuǎn)換成沒有命名空間的變量名數(shù)組.
比如 :
['YAHOO.util.XXXX,YAHOO.util.YYYY,YAHOO.event.XX'] ->['YAHOO']
以前一直是較長(zhǎng)的一段處理代碼,今天突發(fā)奇想,這個(gè)用正則表達(dá)式處理效果如何?
于是,就這種處理,分別測(cè)試了正則表達(dá)式和javascript代碼的效率.
測(cè)試數(shù)據(jù)如下(regTime /codeTime):
620/4536
729/4068
719/4250
645/4152
655/4642
FF和IE結(jié)果差不多,上面是FF2的數(shù)據(jù)
總結(jié):
經(jīng)常看見很多地方對(duì)正則表達(dá)式的效率的懷疑,但是這個(gè)問題放在javascript里面,好像情況又不同了. 適當(dāng)使用正則式,反而可以大大提高效率.
在javascript這類\較慢的解釋型語(yǔ)言里面,少即快,能用原生代碼就不要自己寫.
測(cè)試代碼:
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
金大為 閱讀(918)
評(píng)論(0) 編輯 收藏 所屬分類:
JavaScript