Я тестировал constants
против variables
и заметил значительное улучшение производительности при использовании variables
по сравнению с constants
.Я знаю, что это довольно очевидно, но определенно стоит принять во внимание, что использование локальных переменных над константами всегда, когда это возможно.
Если constants
используется внутри loops
количество раз, это определенно стоитобъявив константу как переменную класса / local и использовать ее вместо этого.
Контрольный тест для тестирования включает создание двух функций.У каждого есть цикл, который выполняется 10000000
раз.Один обращается к константе, объявленной в константном файле, а другой - к локальной переменной.
TestConstants.php
class TestConstants
{
const TEST_CONSTANT = 'This is a constant value';
}
Test.php
use TestConstants;
class Test {
protected $TEST_CONSTANT;
protected $limit = 10000000;
function __construct() {
$this->TEST_CONSTANT = 'This is a constant value';
}
function testA() {
$limit = $this->limit;
$time_start = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
TestConstants::TEST_CONSTANT;
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo ''. $execution_time .' seconds <br/>';
}
function testB() {
$limit = $this->limit;
$time_start = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$this->TEST_CONSTANT;
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo ''. $execution_time .' seconds <br/>';
}
}
$test = new Test();
$test->testA();
$test->testB();
Результаты следующие:
testA () выполняется за 0,55921387672424 секунды
и
testB () выполняется за 0,33076691627502 секунд
Версия PHP
5.6.30
Я думалчтобы поделиться этим как с кем-то, можно было бы выиграть, избегая прямых вызовов на constants
(особенно внутри циклов), объявив их как variables
, где это применимо.
Спасибо.