производительность PHP parse_ini_file ()?

17

Я знаю, что некоторые люди сохраняют настройки в файле .ini и получают значения с parse_ini_file() в PHP. Без выполнения тестов мне интересно узнать о производительности.

Знаете ли вы, может ли кеш-код операции кэшировать любой из этих типов, если параметр находится в ini-файле?

    
задан JasonDavis 22.01.2010 в 21:48
источник

5 ответов

24

Согласно этому старому сообщению в блоге , полученному из веб-архивов.

От самого быстрого до самого медленного:

  1. Сериализованные массивы
  2. Обычный PHP-код
  3. Файлы INI
  4. XML-файлы
  5. Файлы YAML

EDIT (08/02/2012)

Если APC или другой ускоритель доступен на сервере, то простые PHP-файлы будут самыми быстрыми из-за факт, что они будут анализироваться только один раз и сохранены в памяти для дальнейшего использования.

    
ответ дан Crozin 22.01.2010 в 22:01
источник
  • +1 интересная находка, также интересно видеть, что этот тест также (частично), кажется, способствует использованию INI над PHP. Качество перевода Google, кстати, превосходно, изначально я думал, что читаю оригинальный текст на английском языке. –  Pekka 웃 22.01.2010 в 22:40
  • Странно, что сериализованный массив будет быстрее обычного PHP. Разумеется, большая часть работы будет связана с ее неэтериализацией. Я думаю, что относительные характеристики должны быть прокомментированы, хотя, ini-файлы медленнее, чем простой PHP, но с такой крошечной маржой в тестах, что это довольно незначительно. Это интересно. –  GordonM 08.02.2012 в 11:46
  • @GordonM: Конечно, для несериализации требуется меньше работы, интерпретирующей PHP-скрипт. Все, что вам нужно, - это действительно простой парсер, который считывает данные и преобразует их в структуры данных PHP. С другой стороны, PHP-интерпретатор должен выполнять большую работу: проанализировать файл с использованием гораздо более сложного парсера, скомпилировать исходный код в байт-код, запустить байт-код и вернуть результаты - многое, многое другое. –  Crozin 08.02.2012 в 12:25
  • @Crozin: О да, хорошая точка. –  GordonM 08.02.2012 в 13:56
13

Для другой части вопроса: Если кеш-код операции кэширует ini-файлы. На момент написания моей версии PHP 5.3.5 кеш APC не делал этого в автоматическом режиме, но вы можете убедиться, что ini-файлы кэшируются APC, добавив функцию, подобную следующей, и используйте ее для разбора ini-файлов :

function parse_ini_file_ext ($file, $sections = null) {
    ob_start();
    include $file;
    $str = ob_get_contents();
    ob_end_clean();
    return parse_ini_string($str, $sections);
}

Затем ini-файлы кэшируются APC. Измеряется с помощью простого теста microtime, это также быстрее, чем прямое чтение ini-файлов.     

ответ дан dennis 26.12.2011 в 13:29
источник
  • +1 Интересная идея –  JasonDavis 27.12.2011 в 23:40
  • +1 Вау, мне нравится эта идея! –  ethanpil 05.05.2012 в 02:24
  • Я просто хочу указать (я знаю, что это старый), но это обходит важный аспект безопасности INI-файлов (они не содержат или не выполняют код в среде). Вызывая включение, вы разрешаете (возможно) выполнение кода. Это одна из причин, по которой я предпочитаю файлы ini поверх файлов php. –  Mike 08.12.2015 в 23:27
7

У меня всегда возникало подозрение, что parse_ini_file очень медленный, и что хранение переменных в массивах в файлах PHP происходит быстрее. Но есть статья в этой статье , в которой говорится: иначе:

  

И, наконец, мы тестируем сохранение параметров конфигурации в INI-файле или в файле PHP как ассоциативный массив. Мы обнаружили, что сохранение в INI-файле и использование parse_ini_file () быстрее, чем анализ файла PHP.

Я не буду полностью в это поверить, пока не испытаю его сам, когда подойду к нему некоторое время. Но статья (и журнал) выглядит достаточно солидно, чтобы ее воспринимали всерьез.

    
ответ дан Pekka 웃 22.01.2010 в 21:53
источник
  • вау, большое спасибо, я мог бы сам попробовать себя –  JasonDavis 22.01.2010 в 22:01
  • Если вы это сделаете, меня бы очень интересовали результаты! –  Pekka 웃 22.01.2010 в 22:02
  • @jasondavis: Я второй Пекка. –  Alix Axel 22.01.2010 в 22:04
  • Они (также) проверяли это, используя что-то вроде apc? С другой стороны, вы можете не захотеть, чтобы ваш файл конфигурации мог выполнять код. –  VolkerK 22.01.2010 в 22:24
  • В php 5.4.13 я мог бы подтвердить, что ini на 10% быстрее для двух значений и на 30% быстрее для 20 значений. (без разделов) –  mheinzerling 16.04.2013 в 11:41
0

Встроенная функция parse_ini_file реализована в C. Это делает ее довольно быстрой.

    
ответ дан Neville Flynn 22.01.2010 в 22:00
источник
  • Какие встроенные функции не реализованы в C? –  lamas 22.01.2010 в 22:07
-4

Вы будете намного быстрее, если не будете кэшировать ini-файл. Все эксперты могут сказать, что это правда.

    
ответ дан streetparade 22.01.2010 в 21:56
источник
  • -1 Для использования слова «эксперты» –  AntonioCS 23.01.2010 в 02:49
  • Ditto ... -1 для использования «экспертов». Я видел слишком много так называемых разработчиков l33t, которые упали на их лицо в свое время. –  VladTheImpaled 12.11.2010 в 15:05
  • Конечно, загрузка чего-то из памяти происходит быстрее, чем из файловой системы! –  Adam B 21.05.2014 в 06:16