Бенчмарки и всякое такое

parse_ini_string() vs json_decode() vs unserialize() performance

Ясно, что в реальном мире данные для парсинга, придется доставать чем-то вроде parse_ini_file() или file_get_contents() но накладные расходы на вызовы системных fopen()/fclose() в таком контексте, мы можем просто опустить, в силу их одинаковости.

/* parse_ini  */
$data="parama=1"."\n"."paramb=2";
for($i=0;$i<10000000;$i++) {
$tmp=parse_ini_string($data);
}
 
// 18.33s
 
/* json data decoding */
$data='{"parama":1,"paramb":2}';
for($i=0;$i<10000000;$i++) {
$tmp=json_decode($data);
} 
 
// 20.43s
 
/* native PHP unserialize */
$data='a:2:{s:6:"parama";s:1:"1";s:6:"paramb";s:1:"2";}';
for($i=0;$i<10000000;$i++) {
$tmp=unserialize($data);
} 
 
// 11.36s

Итого делаем несложный вывод - json_decode таки самый медленный из этой троицы, в силу накладных расходов на парсинг более сложного формата, ориентированного на хранение вложенных структур данных (ага, еще надо бы xml_parse_ бенчмаркнуть). В реальных юзкейсах, скорее всего, не придется десятками мульйонов раз дергать эти функции, или колбасить ими big data, так что рассмотрение только в этом ключе - само по себе попахивает шизофрениней и экономией на спичках. С точки зрения удобства, INI выглядит более human readable / human editable, и позволяет безболезненно описывать структуры данных двойной вложенности, что в большинстве юзкейсов вполне приемлемо. Если на человечность формата, вообще плевать - можно использовать serialize() или посмотреть в сторону Bencode.

labs.txt · Последние изменения: 2015/08/29 02:01 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki