В настоящее время я храню конфигурацию для моих сценариев PHP в переменных и константах в другом сценарии PHP (например, config.php
).
Таким образом, каждый раз, когда вызывается скрипт, он включает скрипт конфигурации, чтобы получить доступ к значениям переменных / констант.
Поскольку INI-файлы легче анализировать с помощью других сценариев, я подумал о том, чтобы сохранить значения для моей конфигурации в таком файле и прочитать его с помощью parse_ini_file ().
По моему мнению, PHP хранит файлы сценариев в памяти, поэтому включение файла сценария (обычно) не вызывает IO (или Zend выполняет кэширование? Или источники вообще не кэшируются?).
Как это с чтением кастомных INI-файлов. Я знаю что для .user.ini
есть кеширование (см. user_ini.cache_ttl
), но PHP также кэширует пользовательские INI-файлы? или вызывает parse_ini_file()
всегда вызывает IO?
Время, необходимое для загрузки директив конфигурации (что не такое же, как время, необходимое приложению для выполнения этих директив) обычно незначительный — ниже одной миллисекунды для большинства конфигураций «разумного размера». Так что не волнуйтесь — INI, PHP или JSON с точки зрения производительности одинаково хороши. Даже если бы PHP был в десять раз быстрее, чем JSON, это было бы похоже на загрузку в 0,001 с вместо 0,01 с; очень немногие когда-либо заметят.
Тем не менее, там являются соображения при решении, где хранить данные конфигурации.
require_once
,Ядро PHP не делает кеширование. период. Тем не менее, вы никогда не будете использовать ядро PHP в одиночестве: он будет загружен как (быстрый) CGI, модуль Apache и так далее. Кроме того, вы можете не использовать установку «barebone», но вы можете иметь (есть вероятность, что вы будут есть) установлено несколько модулей.
Как часть загрузчика, так и часть модуля могут выполнять кэширование; и оба этих действия могут привести к ненужным дублированиям или конфликтам, поэтому стоит проверить это:
require_once
во всех из них конфигурация будет загружена только один раз, как только она потребуется. Это не кэширование, но, тем не менее, улучшение производительности.Довольно часто бывает так, что в зависимости от какой-либо директивы config вам придется выполнять одну из нескольких нетривиальных операций. Затем вы будете использовать результаты для фактического вывода.
Что замедляет рабочий процесс в этом случае, так это не чтение, скажем, «config.layout» «VERTICAL» или «HORIZONTAL», но на самом деле генерирует макет (или что-то еще). В этом случае вы можете получить огромные преимущества, храня сгенерированный объект где-то:
cache/config.layout.vertical.html.gz
). Вам, вероятно, потребуется развернуть какую-то «проверку устаревших данных», если меняется макет, или какую-то процедуру аннулирования кэша. (Для макетов, в частности, вы можете проверить прут, который также делает параметризованное кэширование шаблона).Вы, вероятно, захотите прочитать о кэширование клиента и заголовки, и, возможно, изучите любые варианты, которые предлагает ваш хостинг (балансировщики нагрузки, HTTP-кэши, такие как Varnish и т. д.).
parse_ini_file () использует стандартные операции для преобразования файла в массив.