转载自:http://hi.baidu.com/likeytom/item/70c7a3290df548c2ee10f11e
在JavaScript中进行字符串的匹配有几种方法,一种是用indexOf函数匹配 子符串,它的参数是一个子字符串substr和一个String对象内开始查找的索引starIndex,当有匹配的字符时返回String对象内第一次 出现字符的位置,另一种方法就是采用正则表达式,JavaScript中正则表达式是通过RegExp类实现的。
因为需要,我们需要用一些关键词与网页的内容进行匹配,看有哪些关键词与文中内容匹配上了,由于关键词的数目较多,因而对于这些关键词与文中内容的匹配的 效率的要求很高,必须采用一种较快快的匹配方式,这里我一个实验,采用javaScript内部的indexOf函数和RegExp正则两种方来测试,测 试的文本是一个4K大小的中文网页,测试的浏览器有firefox和IE。测试结果如下:
类别
FireFox匹配时间(毫秒)
IE匹配时间(毫秒)
关键字数(个)
备注
indexOf
11047
5610
1050
表内数据是对同一关键词组对同一文本的匹配对比情况
测试环境C
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倍左右。