【问题标题】:Shorthand if then else performance/optimization in php速记 if then else php中的性能/优化
【发布时间】:2013-06-28 14:27:48
【问题描述】:

说到PHP,我想问一下这两者在性能上是否有区别:

$name=($IsBoy)?"George":"Mary";

if($IsBoy)
{
    $name="George";
}
else
{
    $name="Mary";
}
  • 这两个会导致不同的操作码吗?

  • 如果是,性能会有任何理论上的差异吗? (当然忽略这两个需要读取/编译/解释的时间)

  • 如果是,那么像 zend 优化器这样的优化器会利用这一点并自动进行任何重新安排吗?

附言如果您认为我的“全手写” if-then-else 代码过于复杂,请提供一个最基本的代码示例并对此进行回答。

更新:

我希望这个问题非常清楚,但似乎人们没有得到这个信息。这个问题是关于性能上的理论(......但真实且可测量)差异(这就是为什么我在 theoretical 中应用 bolditalic em>)。请不要回答说哪种编程风格更具可读性,而且这太吹毛求疵而不必担心性能。

附言2:通过强调理论这个词,我试图阻止“别担心它不值得麻烦,它只是纳秒”类型的答案。

【问题讨论】:

  • 我不确定,但我的猜测是两者之间没有真正的性能差异,如果有,那将是你不应该担心的微优化。
  • 你可以查看这个:fabien.potencier.org/article/48/…
  • Fabien 的文章也非常符合我的观察;虽然很高兴看到有关原因的解释
  • @PédeLeão 它很实用,因为它在现实生活中具有应用,并且完全可以回答。我问了 1)关于生成的操作码(这不是抽象的东西)2)我问了关于性能的测量(现实生活中的测量)和 3)我问了 zend 优化器(这对你来说足够实用吗?)。如果您认为此答案失败,则可以对其进行标记。看在上帝的份上,我发布了代码。
  • Zend 优化器是关于以实际方式改进代码,而不仅仅是理论上的。当您开始谈论纳秒级的性能结果时,您更加让我相信您的问题没有实际目的。

标签: php zend-optimizer shorthand-if php-opcode


【解决方案1】:

好吧,这很有趣

我对您的两个示例分别进行了快速 x 调试测试

这就是我所拥有的

确保每次刷新都会有不同的结果,请确保所有这些都

第二种方法优于第一种总是

即使每次刷新您可能会发现第一种方法偶尔花费的时间更少 但这与 PHP 核心优化有关

关于 Zend 优化器我没有测试过

【讨论】:

    【解决方案2】:

    我经常放弃 if-then-else 的好处:

    $name = 'the expected';
    if ([expr]) $name = 'the exception';
    

    易于阅读,大括号少且紧凑。

    【讨论】:

    • 那很好,我也这样做,但这不是我问题的答案。
    • 但是,这会降低性能,因为您让引擎执行了不必要的步骤。我的意思是您的方法将始终执行以下操作: 1. 设置变量。 2. 检查条件 3. 取消设置变量 4. 为变量设置新值和类型。 IF / ELSE 条件的步骤更少。 1. 检查条件,转到任一行 2. Unset 3. 设置 No 4th step。因此,您在设置第一个变量时节省了一些处理时间。准确地说是 25%。
    【解决方案3】:

    普通 ifelse 语句和三元运算符的性能略有不同。您可以查看下面的 stackoverflow 链接以获取更多参考

    Click here

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 2011-07-17
      • 2016-12-26
      • 2016-05-15
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多