首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript性能:为什么遍历数组并检查每个值都比indexOf、搜索和匹配更快?

Javascript性能:为什么遍历数组并检查每个值都比indexOf、搜索和匹配更快?
EN

Stack Overflow用户
提问于 2012-08-02 17:10:34
回答 2查看 3.2K关注 0票数 18

这对我来说是一个巨大的惊喜,我想要理解这个结果。我做了一个test in jsperf,它基本上应该接受一个字符串(这是我想要检查的网址的一部分),并检查是否存在4个项目(实际上,它们存在于字符串中)。

它通过5种方式进行检查:

  1. 普通indexOf;
  2. 拆分字符串,然后indexOf;
  3. 正则表达式搜索;
  4. 正则表达式匹配;
  5. 拆分字符串,循环遍历项目数组,然后检查其中是否有匹配的项目

令我大吃一惊的是,在Chrome21中,5的速度是最快的。这就是我无法解释的。

在火狐14中,普通的indexOf是最快的,我相信这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-02 18:30:50

我也很惊讶,但Chrome使用的是v8,这是一个高度优化的JavaScript引擎,它使用了各种技巧。谷歌的人可能有最大的一组JavaScript要运行来测试他们实现的性能。所以我猜这是会发生的:

  1. 编译器注意到数组是一个字符串数组(类型可以在编译时确定,不需要运行时检查)。
  2. 在循环中,由于您使用===,因此可以使用内置的CPU操作代码来比较字符串(repe cmpsb)。因此,在第一次循环之后,不会调用任何函数(与其他测试用例不同)
  3. ,所有重要的东西(数组,要比较的字符串)都在CPU缓存中。地方性规则决定了他们所有人。

所有其他需要调用函数和局部性的方法对于regexp版本来说都可能是一个问题,因为它们构建了一个解析树。

票数 9
EN

Stack Overflow用户

发布于 2012-08-02 17:59:41

我又添加了两个测试:http://jsperf.com/finding-components-of-a-url/2

单一的regExp现在是最快的(在Chrome上)。此外,RegExp文本比转换为regExp的字符串文本更快。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11774366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档