Влияет ли возвращение значений из функций на производительность в PHP?

Давайте посмотрим на этот класс и метод:

class Test {
protected $storage;

public function rng() {
$random = random_bytes(100);

$this->storage = $random;
}
}

Некоторые случайные байты вычисляются с помощью функции PHP7 random_bytes (), и результат не возвращается; это только хранится в собственности.

Давайте посмотрим на немного другую версию описанного выше метода:

class Test {
protected $storage;

public function rng() {
$random = random_bytes(100);

$this->storage = $random;

return $random;
}
}

На этот раз результат возвращается. Мне интересно, есть ли какое-либо снижение производительности при возврате значения.

1

Решение

Тестовый скрипт № 1: не возвращает значение

<?php

class Test {
protected $storage;

public function rng() {
$random = random_bytes(100);

$this->storage = $random;
}
}

$instance = new Test;

$start = microtime(true);

for ($i = 0; $i < 10000; $i++) {
$instance->rng();
}

$end = microtime(true);

$diff = $end - $start;

printf('Not returning: %.25f', $diff);

print PHP_EOL;

Тестовый скрипт № 2: возвращаемое значение

<?php

class Test {
protected $storage;

public function rng() {
$random = random_bytes(100);

$this->storage = $random;

return $random;
}
}

$instance = new Test;

$start = microtime(true);

for ($i = 0; $i < 10000; $i++) {
$instance->rng();
}

$end = microtime(true);

$diff = $end - $start;

printf('Returning: %.25f', $diff);

print PHP_EOL;

Результаты:

$ php -f functions-returning-values-benchmark.php
Not returning: 0.0937850475311279296875000

$ php -f functions-returning-values-benchmark.php
Not returning: 0.0939409732818603515625000

$ php -f functions-returning-values-benchmark.php
Not returning: 0.0953028202056884765625000

$ php -f functions-returning-values-benchmark.php
Returning: 0.0947949886322021484375000

$ php -f functions-returning-values-benchmark.php
Returning: 0.0930099487304687500000000

$ php -f functions-returning-values-benchmark.php
Returning: 0.0935621261596679687500000

Заключение

Хита производительности нет.

Протестировано на экземпляре AWS Debian Jessie t2.micro (1vCore, 1 ГБ ОЗУ), работающем под управлением PHP 7.0.7.

4

Другие решения

Других решений пока нет …