在奇数测试中,按位“与”运算符总是(比)模数还快吗?

时间:2018-09-10 10:40:27

标签: javascript performance performance-testing bitwise-operators logical-operators

我正在做一些阅读,试图更好地理解按位运算符,然后得出a helpful old blog post from 2012,它指出-在随机,正整数x的奇数检验中-评估x & 1为60%在作者的计算机上比评估x % 2更快。我在网上其他地方(包括SO上)阅读的资料似乎证实了按位运算符的速度更快。

我以前从未在jsperf中编写过性能测试,但是我有兴趣对其进行测试,以查看Javascript有多少不同。在对几种不同的浏览器和设备进行测试之后,令我感到惊讶的是,取模似乎比没有更快。

结果

Chromebook上的Chrome

Chrome on Chromebook

华为P8上的Chrome

Chrome on Huawei P8

Macbook Pro上的Chrome

Chrome on Macbook Pro

Macbook Pro上的Firefox

Firefox on Macbook Pro

Macbook Pro上的Safari

Safari on Macbook Pro

Macbook Air上的Safari

Safari on Macbook Air

我多次运行每个测试以检查结果是否一致。尽管Safari确实有更多的发展空间,但在FF和Chrome上一直是相当稳定的赢家。

由于我完全没有性能测试的经验,我是否以某种方式严重错误地编写了测试?如果不是,那么现代设备和浏览器是否可能以某种方式导致模运算符的性能优于按位与(或性能差异可忽略不计)?这甚至是基准测试的合适方法吗?

或者还有其他我尚不了解的事情吗? (很有可能!)

1 个答案:

答案 0 :(得分:1)

我认为您已经回答了自己的问题。总是这样吗?显然不是。像使用JavaScript的许多其他功能一样,结果在很大程度上取决于浏览器,因为每个浏览器都有自己的引擎或实现。