2006-11
23

感谢Clear为我们提供了这个效率更高的字符串替换函数。这是经常使用的HTML特殊字符替换函数,即将 &、<、>、" 等函数替换成 &、<、>、"。通常的作法都是连续使用数个 replace 函数,而Clear仅使用一个 replace 就完成了替换。

我对这两个函数作了benchmark,发现新函数的效率约为原函数的1.4倍。虽然没有预想中那么高效率,但当要替换的字符串更多时,效率应该会提高吧。

测试方法为,对一个2048字节长的字符串分别执行两个函数100次,取其执行时间。下面为10次测试的结果。toTXT_1 为通常的作法,toTXT_2 为Clear的方法。

toTXT_1(ms)toTXT_2(ms)toTXT_1/toTXT_2
1609120475%
2250154769%
1672131379%
1813125069%
1844121966%
2063142169%
2031117258%
1797136076%
2015128164%
1860150081%

测试程序在这里。attachjavascript-benchmark.zip




这篇文章有 5 条评论了,快来一起讨论讨论吧!
#1
Clear
2006-11-24 09:42

不错,和我预想的差不多.字符数目越多,效率越高.

#2
fcicq
2006-11-25 14:56

看了一下。。。

单次匹配比多次要快,确实。
O(n),O(nm)哪个快呢?不用说也知道是前者。

#3
charlee
2006-11-25 22:21

虽说如此,但是实际应用的时候要考虑到代码的易读性和维护性。
我觉得单次匹配的可读性要比多次匹配差得多。
实际应用时应考虑单次匹配是否能够带来足够的好处。

#4
hpj_inter
2008-06-24 11:30

各位大哥,明显是toTXT_2(Clear)方法效率要慢得多啊.
IE6和火狐都试过了.特别是IE6,比较下来慢得离谱.在火狐里时间则多花一倍.怎么都说效率高呢?

#5
hpj_inter
2008-06-24 11:34

附上执行结果:
IE6:
function 0: 47 ms (100 times)
function 1: 625 ms (100 times)
function 0: 31 ms (100 times)
function 1: 641 ms (100 times)
function 0: 31 ms (100 times)
function 1: 625 ms (100 times)
function 0: 31 ms (100 times)
function 1: 625 ms (100 times)
function 0: 31 ms (100 times)
function 1: 625 ms (100 times)
function 0: 31 ms (100 times)
function 1: 625 ms (100 times)
function 0: 47 ms (100 times)
function 1: 625 ms (100 times)
function 0: 32 ms (100 times)
function 1: 625 ms (100 times)
function 0: 32 ms (100 times)
function 1: 625 ms (100 times)
function 0: 31 ms (100 times)
function 1: 625 ms (100 times)
function 0: 32 ms (100 times)
function 1: 625 ms (100 times)

火狐3:
function 0: 201 ms (100 times)
function 1: 325 ms (100 times)
function 0: 196 ms (100 times)
function 1: 323 ms (100 times)
function 0: 205 ms (100 times)
function 1: 320 ms (100 times)
function 0: 184 ms (100 times)
function 1: 318 ms (100 times)
function 0: 185 ms (100 times)
function 1: 315 ms (100 times)
function 0: 178 ms (100 times)
function 1: 314 ms (100 times)
function 0: 192 ms (100 times)
function 1: 314 ms (100 times)
function 0: 198 ms (100 times)
function 1: 328 ms (100 times)
function 0: 209 ms (100 times)
function 1: 336 ms (100 times)

添加评论