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