Я хочу измерить точное время загрузки кучи констант в php-файлах. Я выбрал 4 метод:константы loading benchmark
- с помощью пары массива ключа-значения (возвращает массив данных в PHP файл)
- с использованием класса с константами в нем
- определяет
- JSON (написать json_encoded значения в файл и загрузить их с помощью file_get_contents и json_decode)
Сначала я создал 4 различные файлы с этими методами, а затем заполнил их с 5000 случайными парами имени-значения (тем же значением для всех).
Я попытался загрузить их на PHP и использовал функцию microtime
для измерения времени загрузки, но результаты кажутся немного странными! Это мой test.php
файл:
// array
$time['array']['start'] = microtime(true);
$config_a = include('conf_array.php');
$time['array']['end'] = microtime(true);
// class
$time['class']['start'] = microtime(true);
include('conf_class.php');
$config_c = new Config();
$time['class']['end'] = microtime(true);
// define
$time['defin']['start'] = microtime(true);
include('conf_define.php');
$time['defin']['end'] = microtime(true);
// json
$time['json']['start'] = microtime(true);
$config_j = json_decode(file_get_contents('conf_json.json'));
$time['json']['end'] = microtime(true);
foreach ($time as $name => $item) {
echo $name . ": " . (($item['end'] - $item['start']) * 1000) . " units.";
}
Когда я загружаю test.php
с набором новых созданных файлов, я получаю эти результаты:
Array: 7.9629421234131 units.
Class: 6.5279006958008 units.
Defin: 19.877910614014 units.
Json: 4.4741630554199 units.
но когда я ударил кнопку обновления (F5), результаты будут меняться! Ниже приведены результаты одного и того же образца после обновления страницы:
Array: 1.7659664154053 units.
Class: 2.467155456543 units.
Defin: 6.4060688018799 units.
Json: 4.9409866333008 units.
И тогда заказ больше не изменится. Кажется, что php-файлы (все, кроме json) будут загружаться быстрее, когда вы загружаете их более одного раза. То же самое произойдет, если я перезапущу apache (вместе с PHP).
Мне было интересно, почему это происходит ?! Связано ли это с каким-то кешированием?