PHP基准测试-内置的min()函数似乎非常慢

时间:2019-01-09 20:44:08

标签: php benchmarking

我有以下针对php的测试环境:

class Test {
 public $counter;

 public static $timer = null;
 public static $instances = 0;

 public function __construct() {
    $this->counter++;

    if (self::$instances == 0) {
        self::$timer = microtime(true);
    }

    self::$instances++;
    if (self::$instances % 1000 === 0) {
        echo "Duration of 1000 builds: " . (microtime(true) - self::$timer) . " secs ( " . self::$instances . " )\n";
        self::$timer = microtime(true);
    }
 }

 public function __clone() {
    $this->__construct();
 }
}

$Test = new Test();
$array = array();
for ($i=0; $i<5000; $i++) {
   $array[$i] = clone $Test;


   for ($z=0; $z<1000; $z++) {
       //$counter = max(0, $i-$z);
       $counter = $i-$z;
       if ($counter < 0) $counter = 0;
       $get = $array[$counter]->counter;
   }
}

如果按原样运行此脚本,则会得到以下输出:

  

1000个构建的持续时间:0.12318682670593秒(1000)
  1000次构建的持续时间:0.12733101844788秒(2000)
  1000次构建的持续时间:0.12077212333679秒(3000)
  1000次构建的持续时间:0.12160491943359秒(4000)
  1000次构建的持续时间:0.12030696868896秒(5000)

但是,如果我从$counter = max(0, $i-$z);行中删除注释,而是注释掉接下来的两行(同样应该执行相同的操作),则会得到以下结果:

  

1000个构建的持续时间:0.3405590057373秒(1000)
  1000次构建的持续时间:0.33710408210754秒(2000)
  1000次构建的持续时间:0.3317539691925秒(3000)
  1000次构建的持续时间:0.34044504165649秒(4000)
  1000次构建的持续时间:0.33882308006287秒(5000)

使用内置的php max函数大约需要3倍的时间,然后手动计算最大值。奇怪的是,如果我将其转移到一个更基本的示例中,而无需进行类克隆和类构建,则时间是相等的。

谁能解释为什么内置php max的功能这么慢?

0 个答案:

没有答案