Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中执行Math.abs需要更多的时间_Javascript_Performance - Fatal编程技术网

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

在javascript中执行Math.abs需要更多的时间,javascript,performance,Javascript,Performance,我使用Math.abs计算我的1000分,如下所示 Math.abs(a - b) < tolerance; Math.abs(a-b)>31)在Chrome和Operah中最快 三元(x

我使用Math.abs计算我的1000分,如下所示

Math.abs(a - b) < tolerance;
Math.abs(a-b)<公差;
我的分析器显示Math.abs使用62毫秒,我需要对其进行优化,所以尝试了这个

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

我想知道哪一个更好、更快速,这在很大程度上取决于所使用的浏览器(和版本),如您在本文中所见,并在以下章节中讨论:

Anno 2013可以说:

  • Math.abs()
    在IE、FireFox和Safari中速度最快
  • 按位
    (x^(x>>31))-(x>>31)
    在Chrome和Operah中最快
  • 三元
    (x<0?-x:x)
    是Firefox3.x和4时代最快的
您可以提供动态函数加载器来启动最佳函数(基于实时浏览器速度评测或浏览器检测),其中包含该浏览器的最快例程。
当然,这需要付出一些代价:

  • 浪费在浏览器分析(加载页面时的可靠性)或浏览器检测(通常情况下的可靠性)上的时间
  • 更大javascript的额外带宽
  • (通常)更大的内存占用(因为动态生成的函数通常比静态定义的函数(提供了适当的标识符)慢)
所以一般来说我更喜欢:
Mah.abs()
(因为它通常是最小的,并且清楚地表示意图)。
然后是三元(通常与逗号运算符结合,通过逗号运算符,我只需一次测试就可以执行更多逻辑,这可能更快/更短,甚至需要更少的编程逻辑)。
最后,按位变量显示了最少的意图,不提供上述三值优势,只有在不超过32位的情况下才能可靠工作


希望这能有所帮助!

这是你应用程序中的真正瓶颈吗?试着测试一下!你已经编写了代码,为什么要在这里提问?@aga这段代码似乎运行了1000次。因此,是的,这可能是一个性能问题。测试这两个问题可以证明分析器是无用的:D Math.abs在物理上不可能为1000次校准花费62毫秒你可能理解错了。