February 17th, 2010

Сессии и время

Возникла потребность в создании самописных сессий на PHP.
В сущности, что нужно, чтобы организовать механизм сессий? Пустяки: чтение из файла, парсинг содержимого и поиск нужной переменной - с одной стороны; и чтение из файлы, парсинг содержимого, замена/запись нужной переменной - с другой стороны. Как два байта переслать.
Однако слепленный собственными руками механизм работает крайне медленно. Если запись/чтение в/из массива $_SESSION 150 переменных заняла/о 0.0003 секунды, то аналогичные операции с самодельным механизмом для тех же 150 переменных кушают 0.036 секунды. В 120 раз больше. Мягко говоря, безблагодатность.

После недолгого ковыряния выяснилось, что даже простые функции открытия и чтения файла (fopen и fread соответственно), будучи примененными 150 раз, выполняются ни много ни мало 0.0062 секунды (т.е. в 20 раз больше, чем вся работа с массивом $_SESSION вместе взятая). Ну и понятно, что парсинг переменных и их запись отжирает значительно больше времени, в результате имеем то, что имеем.

Я, конечно, понимаю, что внутренняя работа с файлами в PHP писалась на сях и оптимизирована по-всякому, но всё-таки разница в 100 раз - это перебор, товарищи.
Так жить нельзя.