【问题标题】:Setting a variable in a check makes .test faster than .indexOf在检查中设置变量使 .test 比 .indexOf 更快
【发布时间】:2017-12-30 23:37:30
【问题描述】:

我看到in this test benchindexOf 的执行速度比使用带有正则表达式的test 快​​大约 10 倍(因基准测试而有所不同)。

我有一些代码可以在与此相关的地方进行数千次检查,所以我把它换掉了。但我还是决定对其进行测试,以确保它正常工作。

我发现在我的代码中,indexOf 的运行速度仅比 test 快 2 倍左右。

这对我来说没有意义;我想这可能是测试仪。所以我把 jsPerf 中的代码加回到 jsbench 中(我正在测试自己的代码),结果是一样的。

唯一的区别是,当indexOf 没有找到任何结果时,变量的值会发生变化。

Here is the test page.

发生了什么事?

在 Google Chrome 63.0.3239.84 中测试。

【问题讨论】:

    标签: javascript regex performance indexof


    【解决方案1】:

    在我写这个答案时,我进行了另一次测试并弄明白了。我想我会分享答案,因为它真的很有趣。

    我设置变量的地方比较慢,因为我在块内更改的变量是我正在检查的变量!

    //indexOf; adjust input
    if(input.indexOf("abc")!==-1) {
        input="test";
    }
    

    当我改为调整另一个变量时:

    //indexOf; adjust input
    if(input.indexOf("abc")!==-1) {
        potato="test";
    }
    

    性能回升!

    我的猜测是浏览器正在缓存结果,从而提高了速度。或者,它以这样一种方式存储变量,即更改它会与indexOf 检查混淆,这种方式会对性能产生可怕的影响。

    因此,当涉及到大规模的indexOf 检查和响应时,请确保您没有更改您在结果中检查的变量!至少在谷歌浏览器中。 :)

    编辑

    好的,different test set 的结果不同。

    在这种情况下,Regex 实际上更快比indexOf。更大的检查集。额外的变量会减慢它的速度。这并不让我感到惊讶,但巨大的转变确实让我感到惊讶。

    因此,其他结果必须全部与结果缓存有关,这就是使indexOf 看起来更快的原因。至少,这是我的猜测。

    有趣且有趣的测试,我想说我从中学到的最重要的一课就是不要拿其他人的测试来证明你会在你的项目中得到相同的结果。测试您自己代码的速度与您自己的代码略有不同的速度 - 这是获得有用结果的唯一方法。

    和平!

    编辑 2

    Aaa 和删除小写使它们并驾齐驱。 Updated the test here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2014-09-15
      • 1970-01-01
      • 2019-07-31
      相关资源
      最近更新 更多