Речь пойдет о сравнении способа хранения констант в приложении на php
А именно сравниваются два подхода:
define('CONST1', 'val11' );
define('CONST2', 'val12' );
define('CONST2', 'val13' );
и
class Consts{
const CONST1 = 'val1';
const CONST2 = 'val2';
const CONST3 = 'val3';
}
В первом случае случае, вроде бы как должна использоваться специальная область памяти и такой способ уж если и не экономит память, так точно должен быть быстрее. Второй способ в некоторых случаях существенно удобнее. Так как позволяет не захламлять глобальную область видимости.
В общем чего думать и годать провел тесты.
Тест 1. Инициализация
Инициализируем 100 констант при помощи define
define('CACHER_TYPE_1', 'b60861c4492f88589429aab0c67abdd4' );
/*
...
*/
define('CACHER_TYPE_100', 'a66aedeafbc3f1e9fcbaa6a9e8060739' );
memory_start: 114.7578125Кб
time: 0.442981719971 ms
memory_finish: 120.8515625Кб
memory_diff: 6.09375Кб
$ab -n 1000 http://test/test/mem_class.php
Requests per second: 714.52 [#/sec] (mean)
Time per request: 1.400 [ms] (mean)
Теперь инициализируем через константы класса
class SlotType{
const TYPE_CACHER_1 = 'b60861c4492f88589429aab0c67abdd4';
/*
...
*/
const TYPE_CACHER_100 = 'a66aedeafbc3f1e9fcbaa6a9e8060739';
}
memory_start: 114.7578125Кб
time: 0.0340938568115 ms
memory_finish: 114.9921875Кб
memory_diff: 0.234375Кб
$ab -n 1000 http://test/test/mem_class.php
Requests per second: 818.27 [#/sec] (mean)
Time per request: 1.222 [ms] (mean)
Тест 2. Чтение
Считываем все константы определенные через define:
$var = CACHER_TYPE_1 . CACHER_TYPE_2 . /*...*/ . CACHER_TYPE_100;
time: 0.4 ms
memory_diff: 9.3Кб
ab -n1000:
Requests per second: 488.63 [#/sec] (mean)
Time per request: 2.047 [ms] (mean)
Считываем
$var = SlotType::TYPE_CACHER_1 . SlotType::TYPE_CACHER_2 . /*...*/ . SlotType::TYPE_CACHER_100;
time: 0.12 ms
memory_diff: 3.5Кб
ab -n1000:
Requests per second: 609.62 [#/sec] (mean)
Time per request: 1.640 [ms] (mean)
Вывод
Надо сказать, результат меня несколько удивил. Я ожидал, что по крайней мере скорость обработки с define будет выше. Оказывается Использование варианта
class Consts{
const CONST1 = 'val1';
const CONST2 = 'val2';
const CONST3 = 'val3';
}
не только удобней, но и эффективней как по скорости исполнения, так и по расходу памяти.
Отлично! Спасибо!
ОтветитьУдалить