Хранение фалов конфигурации. PHP, data или JSON?

Мне стало интересно, что менее ресурсоёмко при чтение файлов конфигурации: сериализованные данные, include PHP файла или JSON. Забегая вперёд скажу, результаты теста показывают что без разницы как хранить настройки.

И так, вариант №1 include_once:

//test_include.php 
include_once 'config.php';
echo $config['var1']."\n";
echo $config['var5']."\n";
//config.php
$config = array(
  'var1' =--> 1,
  'var2' => 2,
  'var3' => 3,
  'var4' => 4,
  'var5' => 5,
  'var6' => 6,
  'var7' => 7,
  'var8' => 8,
  'var9' => 9,
  'var10' => 10
);

Вариант №2 сериализованные данные:

//test_data.php 
$config = unserialize(file_get_contents('config.data'));
echo $config['var1']."\n";
echo $config['var5']."\n";
//config.data 
a:10:{s:4:"var1";i:1;s:4:"var2";i:2;s:4:"var3";i:3;s:4:"var4";i:4;s:4:"var5";i:5;s:4:"var6";i:6;s:4:"var7";i:7;s:4:"var8";i:8;s:4:"var9";i:9;s:5:"var10";i:10;}

Вариант №3 JSON данные:

//test_json.php 
function toArray($data) {
  if (is_object($data)) $data = get_object_vars($data);
  return is_array($data) ? array_map(__FUNCTION__, $data) : $data;
}
$config = toArray(json_decode(file_get_contents('config.json')));
echo $config['var1']."\n";
echo $config['var5']."\n";
//config.json 
{"var1":1,"var2":2,"var3":3,"var4":4,"var5":5,"var6":6,"var7":7,"var8":8,"var9":9,"var10":10}

Скрипт для многократного запуска:

//test.sh 
#!/bin/bash
echo $1
i=0
while [ $i -lt 1000 ]
do
  php $1 > /dev/null 2> /dev/null
  i=$[$i+1]
done

Результаты:

$ time ./test.sh test_include.php 
test_include.php
real  0m14.026s
user  0m7.388s
sys  0m5.076s
$ time ./test.sh test_data.php 
test_data.php
real  0m14.009s
user  0m7.556s
sys  0m4.900s
$ time ./test.sh test_json.php 
test_json.php
real  0m14.104s
user  0m7.440s
sys  0m5.024s

Как я и сказал в самом начале, нет особой разницы как хранить файлы конфигурации, но я всё же считаю что более читабельный вариант это всё же PHP файлы, т.к. в них можно без труда добавить комментарии, так же в них можно объявлять константы и пользоваться уже ими.

Автор: Сергей Степанов

Поделиться @
aaa, 28 июня 2022 в 21:14