Что быстрее? Константы, переменные или массивы переменных

Мое текущее веб-приложение использует около 30 или около того Contants (DEFINE ()). Я читаю то, что переменные быстрее. При условии, что существует соглашение об именах во избежание перезаписи переменных, единственный недостаток, который я вижу, заключается в том, что эти переменные должны быть определены как глобальные переменные каким-то образом в каждой функции.

Что быстрее? Я часто использую эти константы в своем приложении и, вероятно, буду постоянно добавлять их в список, и они используются в функциях и классах и вне их.

23
задан David 14 October 2011 в 10:41
поделиться

2 ответа

Быстрый тест показал, что определение констант (define('FOO', 'bar');) примерно в 16-18 раз медленнее, чем определение переменной ($foo = 'bar';), но использование определенного (постоянного) значения в 4–6 раз быстрее.

]
8
ответ дан 29 November 2019 в 01:57
поделиться

Я проводил сравнительный анализ 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, где это применимо.

Спасибо.

1
ответ дан 29 November 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: