是Math.abs在javascript中执行需要更多的时间

Is the Math.abs takes more time to execute in javascript

本文关键字:时间 执行 abs Math javascript      更新时间:2023-09-26

我使用Math.abs获得1000分,如下

Math.abs(a - b) < tolerance;

我的分析器显示Math.abs使用62毫秒,我需要优化它,所以尝试了这个

((a-b) < 0 ?-(a-b) : a-b) < tolerance;

我想知道哪个更好更快

它在很大程度上取决于您在本jsperf中看到的使用的浏览器(和版本),并在SO:的相关问题中进行了讨论

安诺2013可以说:

  • Math.abs()在IE、FireFox和Safari中最快
  • 比特(x ^ (x >> 31)) - (x >> 31)在Chrome和Operah中最快
  • 三元(x < 0 ? -x : x)是FireFox3.x和4时代速度最快的

您可以提供一个动态函数加载程序来启动最佳函数(基于实时浏览器速度评测或浏览器检测),其中包含该浏览器最快的例程
当然,这需要付出几个代价:

  • 浪费在浏览器分析(加载页面时的可靠性)或浏览器检测上的时间(嗯,一般来说是可靠性…)
  • 用于更大javascript的额外带宽
  • (通常)更大的内存占用(因为动态生成的函数通常比静态定义的函数(给定了适当的标识符)慢)

所以总的来说,我更喜欢:
Mah.abs()(因为这通常是最小的并且清楚地指示意图)
然后是三进制(通常与逗号运算符相结合,通过逗号运算符,我只需一次测试就可以执行更多的逻辑,这可以更快/更短,甚至需要更少的编程逻辑)
最后,逐位变体揭示了最不明显的意图,没有提供上述三元优势,只有在不超过32位的情况下才可靠。。

希望这能有所帮助!