感谢Clear为我们提供了这个效率更高的字符串替换函数。这是一个很普通的HTML特殊字符替换函数,就是将&、"、'、<、> 等函数替换成&、"、'、<、>。如果用以往的方法就是多次使用replace 函数,每替换一次就要用一次。这样做会很没有效率,而Clear给我们带来的方法只用replace一次,就可以替换整个字符串里面的匹配字符为不同的结果,非常有效率的。
测试了一下感觉字符数目越多,效率越高。
一下是测试结果:
测试方法为,对一个2048字节长的字符串分别执行两个函数100次,取其执行时间。下面为10次测试的结果。toTXT_1 为通常的作法,toTXT_2 为Clear的方法。
toTXT_1(ms) | toTXT_2(ms) | toTXT_1/toTXT_2 |
1609 | 1204 | 75% |
2250 | 1547 | 69% |
1672 | 1313 | 79% |
1813 | 1250 | 69% |
1844 | 1219 | 66% |
2063 | 1421 | 69% |
2031 | 1172 | 58% |
1797 | 1360 | 76% |
2015 | 1281 | 64% |
1860 | 1500 | 81% |
测试程序在这里:
<
html
>
<
head
>

<
script
>
...


function toTXT_1(str)...{
str = str.replace(/&/g, "& amp;");
str = str.replace(/>/g, "& gt;");
str = str.replace(/</g, "& lt;");
str = str.replace(/"/g, "& quot;");
str = str.replace(/'/g, "& #39;");
return str;
}

function toTXT_2(str){
var RexStr = /<|>|"|'|&/g
str = str.replace(RexStr,
function(MatchStr){
switch(MatchStr){
case "<":
return "& lt;";
break;
case ">":
return "& gt;";
break;
case """:
return "& quot;";
break;
case "'":
return "& #39;";
break;
case "&":
return "& amp;";
break;
default :
break;
}
}
)
return str;
}

var benchStr;


/**//**
* start benchmark
*/

function benchmarkStart() ...{

benchStr = "&><"'";

for (var i = 0; i < 8; i++) ...{
benchStr = benchStr + benchStr;
}
var result = benchmark(100, [ toTXT_1_wrap, toTXT_2_wrap ]);

var r = document.getElementById("result");
r.innerHTML += result;
}


function toTXT_1_wrap() ...{
return toTXT_1(benchStr);
}


function toTXT_2_wrap() ...{
return toTXT_2(benchStr);
}


/**//**
* benchmark function
* @param {Number} count run count
* @param {Array} fa function array for benchmark
*/

function benchmark(count, fa) ...{
var result = '';


for (var i = 0; i < fa.length; i++) ...{
var f = fa[i], d = new Date(), startTime, endTime, dummy;

startTime = d.getTime();

for (var j = 0; j < count; j++) ...{
dummy = f();
}
d = new Date();
endTime = d.getTime();

result += "function " + i + ": " + (endTime - startTime) + " ms (" + count + " times)<br/> ";
}

return result;
}

</
script
>
</
head
>
<
body
>
<
input
type
="button"
onclick
="benchmarkStart()"
value
="Start Benchmark"
/>
<
div
id
="result"
></
div
>
</
body
>
</
html
>