Хранение объектов между запросами в PHP без сериализации - PullRequest
3 голосов
/ 28 июля 2011

Я пишу веб-приложение с состоянием на PHP, в котором состояние может содержать множество объектов. На данный момент я храню все эти объекты в $ _SESSION и сериализую их в конце запроса. Это немного болезненно, потому что сериализация всего сеанса занимает секунды, а десериализация - еще больше времени.

Я хотел попробовать APC, потому что надеялся, что тогда объекты просто копируются, а не сериализуются. Увы, кажется, что если я передаю apc_store($object) объект, он все равно сериализует его перед передачей другому процессу. (История гласит, что примитивные значения и массивы запоминаются без сериализации, но это не является для меня подходящим решением, поскольку мои объекты сеанса имеют много (циклических) ссылок.)

Мой вопрос: существует ли известный способ сохранения постоянства объектов в PHP без необходимости их сериализации после каждого запроса? Я слышал слухи, что интерпретатор HipHop может помочь с этим, но я не нашел никаких рабочих примеров в сети. Может кто-нибудь сказать мне, если это вообще возможно в PHP?

(я знаю, я должен писать этот проект на Java или другом языке, который поддерживает постоянные экземпляры без TCP-соединения)

1 Ответ

3 голосов
/ 31 июля 2011

Всякий раз, когда вам нужно сохранить (заморозить) объект, он должен быть сериализован. Это не зависит от хранилища (APC, файлов сеансов, базы данных и т. Д.), Потому что процесс сценария завершится и при следующем запуске объекты должны снова ожить.

Таким образом, вещи не могут быть сохранены в «состоянии выполнения», объекты всегда будут сериализованы для хранения.

Известно, что сериализация PHP не самая быстрая. Есть альтернативные реализации, которые вы можете использовать, например, igbinary PHP расширение . Он предлагает функцию сериализации / десериализации рядом с прозрачной обработкой сеанса. Может быть, это действительно полезно для вашего сценария.

В любом случае: чем больше вы храните внутри сеанса, тем больше вам нужно разморозить или разбудить в начале запроса, тем больше времени это займет.

Похожие: Что такое обработчик сериализации php_binary?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...