对于奇数测试,按位 AND 运算符总是比模数快(仍然)吗?
Is it (still) the case that the bitwise AND operator is always faster than modulus for an odd number test?
我正在做一些阅读,试图更好地理解按位运算符并偶然发现 a helpful old blog post from 2012,其中指出 - 在 运行dom 上的奇数测试中,正整数 x - 评估 x & 1
在作者的计算机上比评估 x % 2
快 60%。我在网上其他地方读过的东西(包括 SO)似乎证实了按位运算符更快。
我以前从未在 jsperf 中编写过性能测试,但我有兴趣对此进行测试,以了解 Javascript 中的差异有多大。我惊讶地发现,在对几个不同的浏览器和设备进行测试后,模数似乎经常更快。
结果
Chrome Chrome本书
Chrome 华为 P8
Chrome 在 Macbook Pro
Macbook Pro 上的火狐
Macbook Pro 上的 Safari
Macbook Air 上的 Safari
我运行每次测试几次,检查结果是否一致。在 FF 和 Chrome 上有相当稳定的赢家,尽管 Safari 确实有更多的波动。
我完全没有性能测试的经验,是不是我写的测试错得很厉害?如果不是,现代设备和浏览器是否会以某种方式导致模数运算符的性能优于按位 AND(或性能差异可忽略不计)?这甚至是基准测试的合适方法吗?
或者还有其他我还不明白的事情吗? (很有可能!)
我想你已经回答了你自己的问题。总是这样吗?显然不是。与 JavaScript 的许多其他内容一样,结果在很大程度上取决于浏览器,因为每个浏览器都有自己的引擎或实现。
我正在做一些阅读,试图更好地理解按位运算符并偶然发现 a helpful old blog post from 2012,其中指出 - 在 运行dom 上的奇数测试中,正整数 x - 评估 x & 1
在作者的计算机上比评估 x % 2
快 60%。我在网上其他地方读过的东西(包括 SO)似乎证实了按位运算符更快。
我以前从未在 jsperf 中编写过性能测试,但我有兴趣对此进行测试,以了解 Javascript 中的差异有多大。我惊讶地发现,在对几个不同的浏览器和设备进行测试后,模数似乎经常更快。
结果
Chrome Chrome本书
Chrome 华为 P8
Chrome 在 Macbook Pro
Macbook Pro 上的火狐
Macbook Pro 上的 Safari
Macbook Air 上的 Safari
我运行每次测试几次,检查结果是否一致。在 FF 和 Chrome 上有相当稳定的赢家,尽管 Safari 确实有更多的波动。
我完全没有性能测试的经验,是不是我写的测试错得很厉害?如果不是,现代设备和浏览器是否会以某种方式导致模数运算符的性能优于按位 AND(或性能差异可忽略不计)?这甚至是基准测试的合适方法吗?
或者还有其他我还不明白的事情吗? (很有可能!)
我想你已经回答了你自己的问题。总是这样吗?显然不是。与 JavaScript 的许多其他内容一样,结果在很大程度上取决于浏览器,因为每个浏览器都有自己的引擎或实现。