Тестирование PHP - встроенная функция min () кажется очень медленной - PullRequest
0 голосов
/ 09 января 2019

У меня есть следующая тестовая среда для 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 работает намного медленнее?

...