我正在努力改进一个函数的性能,该函数接受一个XML字符串并替换其中某些字符(编码)后返回该字符串。由于该函数经常被使用,因此运行速度尤为重要。通常情况下,没有任何字符需要被替换 - 因此我希望特别针对这种情况进行优化。正如您在示例代码中所看到的,需要替换的字符串很短且数量相对较少。源字符串通常很短(例如10-20个字符),但也可能更长(例如大约200个字符)。
到目前为止,我已确保正则表达式被预编译,并消除了嵌套函数对操作造成的影响(毫秒级别的时间差在这一点上很重要)。
到目前为止,我已确保正则表达式被预编译,并消除了嵌套函数对操作造成的影响(毫秒级别的时间差在这一点上很重要)。
var objXMLToString = new XMLToStringClass();
function XMLToStringClass(){
this.tester= /\\34|\\39|\\62|\\60|\\13\\10|\\09|\\92|&/;
this.replacements=[];
var self=this;
function init(){
var re = new regexReplacePair(/\\34/g,'"');
self.replacements.push(re);
re = new regexReplacePair(/\\39/g,"'");
self.replacements.push(re);
re = new regexReplacePair(/\\62/g,">");
self.replacements.push(re);
re = new regexReplacePair(/\\60/g,"<");
self.replacements.push(re);
re = new regexReplacePair(/\\13\\10/g,"\n");
self.replacements.push(re);
re = new regexReplacePair(/\\09/g,"\t");
self.replacements.push(re);
re = new regexReplacePair(/\\92/g,"\\");
self.replacements.push(re);
re = new regexReplacePair(/\&/g,"&");
self.replacements.push(re);
}
init();
}
function regexReplacePair(regex,replacementString){
this.regex = regex;
this.replacement = replacementString;
}
String.prototype.XMLToString = function() {
newString=this;
if(objXMLToString.tester.test(this)){
for (var x = 0;x<objXMLToString.replacements.length;x++){
newString=newString.replace(objXMLToString.replacements[x].regex,objXMLToString.replacements[x].replacement);
}
return newString;
}
return this;
}
- 在这种情况下,使用
String.replace
函数是否更好? - 目前,如果单个字符匹配,我正在替换所有字符-是否可能测试并有条件地进行替换会更好?如果是这样,对于这个数据集,
indexOf
比正则表达式更快吗?