【问题标题】:What code cost more at performance level哪些代码在性能级别上成本更高
【发布时间】:2016-11-30 02:36:27
【问题描述】:

每个人都知道今天的技术成本很低,我们中的许多人并不真正关心它。所以,看看这段代码:

方法#1

$Obj = new Obj();

if (!empty($val1)) {
    $Obj->setVal1($val1);
}

if (!empty($val2)) {
    $Obj->setVal2($val2);
}

if (!empty($val3)) {
    $Obj->setVal3($val3);
}

if (!empty($valN)) {
    $Obj->setValN($valN);
}

方法 #2

if (!empty($var1) && !empty($var2) && !empty($var3) && !empty($varN)) {
    $Obj = new Obj();

    if (!empty($val1)) {
        $Obj->setVal1($val1);
    }

    if (!empty($val2)) {
        $Obj->setVal2($val2);
    }

    if (!empty($val3)) {
        $Obj->setVal3($val3);
    }

    if (!empty($valN)) {
        $Obj->setValN($valN);
    }
}

在第一个示例中,如果不存在任何值,我们将创建对象并离开,在第二个示例中,我们首先检查值是否存在且不为空,然后创建对象并设置值。从您的角度来看,哪一个是性能级别的最佳解决方案?你会在你的代码上写哪一个?

注意: N 不是无限的

【问题讨论】:

  • 你为什么不做一个性能分析,自己看看?
  • 它们在功能上并不相同。这是一个如此微的优化,我不确定我是否担心。
  • 第二种方法是测试!empty 的所有 4 个变量两次。如果您尝试优化,为什么要这样做??
  • 这些“性能”改进只是浪费开发者的生命,仅此而已。你不应该在这上面浪费你的时间,收益是值得怀疑的,即使它存在 - 它是如此之小以至于不值得花更多的文字在它上面。
  • 好的,感谢大家的时间和回答我现在明白了

标签: php performance oop php-7


【解决方案1】:

通常是 notempty()isset() 这样的操作会浪费时间。相反,更高的内存使用和内存泄漏往往会导致更多的 GC 操作,new() 执行需要时间的初始化,I/O 操作会导致延迟,是你应该改进的地方。 p>

如果要详细讨论时间使用情况可能会非常非常复杂:编译期间、运行时、代码是否会运行等等。

【讨论】:

    【解决方案2】:

    这取决于你想要什么, 如果第一个代码不为空,则第一个代码将设置值,即使另一个值可能为空,

    但第二个代码会先检查所有值,因此如果其中一个值为空,则永远不会创建 Obj。

    这是一个明确的选择, 如果您认为所有值都很重要且必要,则使用第二个代码,如果可以将另一个值留空并想要更新任何非空值,则使用第二个代码没有意义

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多