JavaScript 字符串匹配性能比较
时间:2007-09-04 来源:greenet
因为需要,我们需要用一些关键词与网页的内容进行匹配,看有哪些关键词与文中内容匹配上了,由于关键词的数目较多,因而对于这些关键词与文中内容的匹配的效率的要求很高,必须采用一种较快快的匹配方式,这里我一个实验,采用javaScript内部的indexOf函数和RegExp正则两种方来测试,测试的文本是一个4K大小的中文网页,测试的浏览器有firefox和IE。测试结果如下:
类别 |
FireFox匹配时间(毫秒) |
IE匹配时间(毫秒) |
关键字数(个) |
备注 |
indexOf |
11047 |
5610 |
1050 |
表内数据是对同一关键词组对同一文本的匹配对比情况 测试环境C2.4G 1G Memory XP sp2 |
indexOf |
警告 |
6953 |
1200 |
|
RegExp |
813 |
650 |
1050 |
|
RegExp |
954 |
766 |
1200 |
|
RegExp |
1141 |
875 |
1500 |
|
RegExp |
1672 |
1250 |
2100 |
|
RegExp |
2406 |
1781 |
3000 |
|
RegExp |
3727 |
2657 |
4000 |
|
RegExp |
5312 |
3516 |
6000 |
|
RegExp |
8859 |
5766 |
10000 |
|
RegExp |
|
281 |
1050 |
利用IE的innerText进行全文匹配 |
406 |
1500 |
|||
797 |
3000 |
|||
2657 |
10000 |
根据测试的结果看出,正则表达式的匹配速度相比较于indexOf字符串函数性能要快10倍左右,IE相对于firefox性能优1.5倍左右,我们对网页的内文本的处理方式是采用针对各个段落分别处理,主要是由于firefox不支持innerText属性的原因,在针对IE的innerText对整个body内的元素进行一次性的正则匹配,其性能相对于分别对段落匹配要提高1倍左右。
IE、Opera、Safari支持innerText属性