Пишу, по большей части, про историю, свою жизнь и немного про программирование.

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 комментариев
Ktulhu 2003

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

Евгений Степанищев (bolknote.ru) 2003

Комментарий для Ktulhu:

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

eddie 2003

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

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

Евгений Степанищев (bolknote.ru) 2003

Комментарий для eddie:

А что за глюк?

me 2003

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

Евгений Степанищев (bolknote.ru) 2003

Комментарий для eddie:

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

rinatmuhtarov.moikrug.ru 2008

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

Евгений Степанищев (bolknote.ru) 2008

Комментарий для rinatmuhtarov.moikrug.ru:

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