哪些比较运算符处理器效率更高:<,< =,!=或==?

时间:2014-01-12 10:59:53

标签: javascript php performance operators

我可以在比较操作类型之间进行选择,请按照效率从最有效的处理器开始按顺序排列:

if (x == 1)

if (x != 0)

if (x < 2)

if (x <= 3)

我常常面对的情况是我可以使用其中任何一种我选择的相同结果...

这是我一直想知道的事情,也许其他人也想知道。此外,它是否因不同的编程语言而异?

编辑:感谢您提供的信息。因为它们显然效率相同,这意味着我可以使用更多&gt;或者&lt;键入运算符以便更好地捕捉毛刺!

3 个答案:

答案 0 :(得分:2)

通常,其中任何一个都比其他人更有效。这是因为在大多数CPU上,它们映射到专用操作码,其执行由完全相同的物理单元处理,配置略有不同。使用不存在但非常简单易懂的汇编语法,每个分支(if条件)可能转换为:

if (x == 1)
    test = x - 1
    branch_equal_zero test

if (x != 0)
    test = 0
    branch_non_equal_zero test

if (x < 2)
    test = x - 2
    branch_lower_than_zero test

if (x <= 3)
    test = x - 3
    branch_lower_or_equal_to_zero test

正如你所看到的,与零相比(无论比较如何)可能更快,因为没有涉及减法 - 但是你可以的这一小部分时间更快/ em>只在非常重的负载下注意它。

即使我们说的是解释型语言(PHP和JS),答案也不会改变,因为所有运算符都直接映射到解释器的底层本机比较。更不用说可能发生的任何类型转换或中间转换。

答案 1 :(得分:1)

简单的答案是“它们都是一样的”,因为在基本层面它们都是一样的。而且,它们都非常快,你无论如何也不会注意到它们之间的区别。

我可以看到一个人可能比另一个更快--CPU倾向于重新排序指令和预测分支 - 所以在特定情况下可能会有所不同。

但是,如果这些情况适用于您在JavaScript中执行的任何操作,则不会。在JavaScript中,您可以非常肯定他们都是一样的。

答案 2 :(得分:1)

让我们换一种说法,从更高层次开始。 Javascript和PHP,它们都是高级语言,所以不会直接使用CPU,而是已经考虑过优化你编写的许多进程。在Javascript中,“进程”称为Javascript引擎。在PHP中,它是解释器本身。不要误解我,他们被认为做了他们的工作,在优化上留下了“一点点”。

因此,最终优化此类操作的真正方法是在PHP或Javascript引擎本身中找到一个真正的大问题。

现在让我们面对这些运营商的最低方面。现代CPU具有3.2GHz(甚至更高)的时钟速度。因此,这意味着每秒3200000000次操作,这是一个巨大的数字。假设这些操作(最终几乎全部相同)使用2或3个刻度。你需要大约10 ^ 9个操作员注意到有意义的差异。