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

时间:2013-11-18 06:49:58

标签: javascript performance

我使用Math.abs获得1000点以下

Math.abs(a - b) < tolerance;

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

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

我想知道哪个更好更快

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于您在jsperf中看到的浏览器(和版本),并在related question on SO中进行了讨论:

Anno 2013可以说:

  • Math.abs()在IE,FireFox和Safari
  • 中最快
  • 按位(x ^ (x >> 31)) - (x >> 31)在Chrome和Operah中最快
  • 三元(x < 0 ? -x : x)只是FireFox 3.x和4时代中最快的。

您可以提供动态函数加载器来启动最佳功能(基于实时浏览器内速度分析或浏览器检测),其中包含该浏览器的最快例程。
当然,这需要几个成本:

  • 时间浪费在浏览器分析(加载页面时的可靠性)或浏览器检测(好的,一般的可靠性......)
  • 更大的javascript额外带宽
  • (通常)更大的内存占用(因为在运行中生成的函数通常比静态定义的函数(给定正确的标识符)慢)

所以一般来说我更喜欢:
Mah.abs()(因为这通常是最小的并且明确表示意图) 接下来是三元组(通常与逗号运算符结合使用,只需一次测试即可执行更多逻辑,这可以更快/更短,甚至需要更少的编程逻辑)。
最后,按位变量显示意图最小,不提供上述三元优势,并且只有在不超过32位时才能正常工作。

希望这有帮助!