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) и был уверен, что с обратным преобразованием дело обстоит точно так же. Выходит ошибался.

Комментарии 9

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

и вообще include как-то странно работает именно над чтением файла (глючит -— я даже в bugs заслал инфу)
eddie № 6
Евгений Степанищев автор № 7
Нда.. действительно очень странно… :| Я им тоже как-то пару багов высылал — ни один не исправили. Один раз свалили всё на Apache, в другой — на GD :) Может они, конечно, и правы, но мне-то от этого не легче.
rinatmuhtarov.moikrug.ru № 8
Вы можете повторить Ваш эксперимент для PHP 5.2.x?
В этой ветке разработчики ускорили include.
Евгений Степанищев (bolknote.ru) автор № 9
Пока не могу, но его проводили другие люди, говорят, что с применением кешей/акселераторов (типа APC, XCache, eAccelerator) ситуация меняется прямо в обратную сторону — быстрее становятся именно include.