JavaScript性能:如何才能通过数组循环和检查每个值速度比的indexOf,搜索和匹配?(Ja

2019-06-26 17:12发布

在此之前作为一个巨大的惊喜给我,我想知道这个结果。 我做了一个在jsperf测试是基本上应该采取的字符串(即,我想检查URL的一部分),并检查的4个项目(即实际上,存在于串中)的存在。

它检查在5种方法:

  1. 纯的indexOf;
  2. 分割字符串,然后的indexOf;
  3. 正则表达式搜索;
  4. 正则表达式匹配;
  5. 拆分字符串,遍历项目的数组,然后检查其中是否它应该匹配的东西相匹配

要我巨大的惊喜,5号是在Chrome 21中最快的 。 这是我无法解释。

在Firefox 14中,普通的indexOf是最快的,一个我可以相信。

Answer 1:

我也惊讶,但Chrome使用的V8,一个高度优化的JavaScript引擎,从而牵引各种花样。 而在谷歌的人可能有最大的组JavaScript的运行,以测试其实现的性能。 所以我的想法是这样的情况发生:

  1. 编译器的通知,该阵列是一个字符串数组(类型可以在编译时,没有必要运行时检查来确定)。
  2. 在循环中,因为你用=== ,内置的CPU运算代码比较字符串( repe cmpsb )都可以使用。 因此,没有函数被调用(不同于任何其他测试用例)
  3. 第一循环之后,一切都重要(数组,字符串比较反对)是在CPU缓存。 局部性rulez他们。

所有其他方法需要调用功能,因为他们建立一个解析树地点可能是正则表达式版本的问题。



Answer 2:

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

单正则表达式现在是最快的(在Chrome)。 也正则表达式文字是比转换成正则表达式字符串文字更快。



文章来源: Javascript Performance: How come looping through an array and checking every value is faster than indexOf, search and match?