【问题标题】:php - efficiency of if conditions - nested or using the AND method? [duplicate]php - if 条件的效率 - 嵌套还是使用 AND 方法? [复制]
【发布时间】:2013-06-28 07:37:56
【问题描述】:

在 php 中,您可以使用嵌套 If 结构,或者您可以使用 && 方法组合条件...在性能/效率方面是否有任何已知差异? (是否已知/确定速度更快,或者资源密集度更低等?)

嵌套:

if ($X == $Y) {
    if ($N >= $P) {
        if ($tt != true) {
            // do something
        }
    }
}

或与AND结合:

if ($X == $Y  &&  $N >= $P  &&  $tt != true) {
    // do something
}

我知道这似乎与
PHP Nested Ifs vs Single If with Multiple Conditions
的重复 但那是因为它没有得到真正的回答(而是人们与 Java 等事物相关联)。

所以请不要将此标记为欺骗,或链接到非 PHP 问题的答案等。

【问题讨论】:

  • 顺便说一句,if 语句本身永远不会导致性能问题,因此请注意可读性。
  • 您最好不要担心算法的运行时复杂性和 SQL 查询/数据库处理。这些将始终支配您的运行时间,使如此小的差异(如果存在)可以忽略不计。
  • 你痴迷于性能,这会伤害你。
  • @theclueless1:您被严重误导了,没有比您给出的for 示例更好的证明($i = 0 显然只执行一次,否则循环怎么可能工作?)。询问任何有经验的开发人员,他们会告诉您在尝试优化性能之前(和之后!)始终配置,原因有很多(您可以谷歌)。这正是您在这里所做的。你给出的球场(1/100 秒,0.5 秒)远非现实; 1/10000000 秒将接近。我赞赏你的动机,但你的直觉还没有很好地发展。
  • @theclueless1:他们建议从循环的条件部分中取出任何不必要的计算,这是正确的。但这是一个完全不同的故事:这些计算具有未知的复杂性,并且执行它们可能需要比循环体本身更长的时间。在这里,我们谈论的是一些 CPU 指令(即使是这样;取决于编译器可以生成相同代码的语言),这不仅是一个已知的、微乎其微的数量,而且不一定在循环中。这就是我之前说“痴迷”的原因。

标签: php performance if-statement


【解决方案1】:

谈到效率,我认为两者没有任何区别。即使一个布尔决策在一行语句中为假,其余的决策也不会被评估,并且类似的情况发生在嵌套的 if 语句中。

但可读性和清晰度绝对重要。对每个单独的条件进行嵌套 if 会使代码不必要地冗长,而一行中的许多语句会让人难以理解,因为长的水平语句看起来有点不清楚。我尝试将相关条件保留为多个 if 语句和具有不同概念的条件作为嵌套 if 语句。

【讨论】:

  • 这通常是我的逻辑;结合相关的东西,隔离特定的/不寻常的。但我一直想知道是否有“成本”......因此这个(不受欢迎的)问题。
【解决方案2】:

如果你有可能由 if 子句引起的性能问题,你不应该使用像 php 这样的脚本语言,或者至少使用某种缓存(例如 APC)。

在“正常”情况下,嵌套和非嵌套不会有任何区别。如果您使用数百万个 if,您可能会发现细微差别。

【讨论】:

  • 差异似乎很小——我担心的是累积和复合的影响。如果我在大型数据集上寻找多个条件,它可能会变得更加明显。如果我多次使用这种方法,它可能会再次显示。因此,为什么我想我会问是否有“更好”的方法。
  • 如果您发现代码中的实际差异,您绝对应该考虑使用另一种(更合适的)语言。
  • 根据初始响应中提供的链接; codepad.viper-7.com/xxPV9d - 有区别(虽然很小/很小):D
  • 这实际上证明了我的观点。如果你有 500 万个 if 并且你确实担心 50 毫秒,每个 if 计算为 10 纳秒,那么你绝对应该考虑使用支持实时的语言。
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 2017-11-08
  • 2015-10-27
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
相关资源
最近更新 更多