Unserialize vs. Include

С подачи mivlad провёл эксперимент. Создал расходящийся массив таким вот образом:

for ($i = 0; $i<10; $i++)
$a[$i] = array_merge($a, md5($i));

Результат записал в два файла. Один — в виде serialize-представления, другой — в виде PHP (собственная функция, аналог var_export).

Далее, в цикле (1000 итераций) сначала читал этот файл и unserializ'ил его в переменную, потом — просто включал его через include.

Так вот. Результаты меня поразили. Я-то думал, что всё с точностью наоборот.

1000 штук unserialize выполнились за 10 секунд
1000 штук include — за 25.

На одномерных массивах разница всего лишь в треть, но опять же проигрывает include. Этому, конечно, есть объяснение — serialize-формат куда проще PHP, а, следовательно, и парсить его можно быстрее. До этого я замерял скорости serialize и var_export (выигрывал var_export) и был уверен, что с обратным преобразованием дело обстоит точно так же. Выходит ошибался.

17 августа 2003 20:02

rinatmuhtarov.moikrug.ru (rinatmuhtarov.moikrug.ru)
20 февраля 2008, 09:48

Вы можете повторить Ваш эксперимент для PHP 5.2.x?
В этой ветке разработчики ускорили include.

bolk (bolknote.ru)
20 февраля 2008, 11:07, ответ предназначен rinatmuhtarov.moikrug.ru:

Пока не могу, но его проводили другие люди, говорят, что с применением кешей/акселераторов (типа APC, XCache, eAccelerator) ситуация меняется прямо в обратную сторону — быстрее становятся именно include.

Ktulhu (инкогнито)
18 августа 2003, 00:07

В свое время тоже удивился, а потом понял — ничего удивительного.

bolk (bolknote.ru)
18 августа 2003, 00:07, ответ предназначен Ktulhu

Я тоже уже понял.

eddie (инкогнито)
18 августа 2003, 00:10

я еще больше удивился когда замерял include(xxx) vs eval(file_get_contants(xxx)))

и вообще include как-то странно работает именно над чтением файла (глючит -— я даже в bugs заслал инфу)

bolk (bolknote.ru)
18 августа 2003, 00:10, ответ предназначен eddie

А что за глюк?

me (инкогнито)
18 августа 2003, 02:40

праильно говорите, товарисчь)
http://www.livejournal.com/community/ru_webdev/133811.html
а то тама флейм развели)

eddie (инкогнито)
18 августа 2003, 13:51

http://bugs.php.net/?id=25072

bolk (bolknote.ru)
18 августа 2003, 13:51, ответ предназначен eddie

Нда.. действительно очень странно… :| Я им тоже как-то пару багов высылал — ни один не исправили. Один раз свалили всё на Apache, в другой — на GD :) Может они, конечно, и правы, но мне-то от этого не легче.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)