这对我来说是一个巨大的惊喜,我想要理解这个结果。我做了一个test in jsperf,它基本上应该接受一个字符串(这是我想要检查的网址的一部分),并检查是否存在4个项目(实际上,它们存在于字符串中)。
它通过5种方式进行检查:
令我大吃一惊的是,在Chrome21中,5的速度是最快的。这就是我无法解释的。
在火狐14中,普通的indexOf是最快的,我相信这一点。
发布于 2012-08-02 18:30:50
我也很惊讶,但Chrome使用的是v8,这是一个高度优化的JavaScript引擎,它使用了各种技巧。谷歌的人可能有最大的一组JavaScript要运行来测试他们实现的性能。所以我猜这是会发生的:
===
,因此可以使用内置的CPU操作代码来比较字符串(repe cmpsb
)。因此,在第一次循环之后,不会调用任何函数(与其他测试用例不同)所有其他需要调用函数和局部性的方法对于regexp版本来说都可能是一个问题,因为它们构建了一个解析树。
发布于 2012-08-02 17:59:41
我又添加了两个测试:http://jsperf.com/finding-components-of-a-url/2
单一的regExp现在是最快的(在Chrome上)。此外,RegExp文本比转换为regExp的字符串文本更快。
https://stackoverflow.com/questions/11774366
复制相似问题