Должен ли я хранить мои объекты PHP5 в сеансе для SPEED и почему? - PullRequest
3 голосов
/ 25 ноября 2010

Как вы знаете, когда вы сохраняете определение класса в SESSION, сериализуемое автоматически и не сериализуемое на каждой из следующих страниц.

Я только начал писать классы, и мне интересно, что: для хранения классав сеансе или файл с сериализацией это хорошая идея?

Если да, как я могу STORE, а затем GET использовать класс в PHP5 ?

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010

Если это не крошечный класс, вероятно, нет ( см. Этот вопрос для возможных ловушек с большими сессиями ).Короче говоря, сеансы не предназначены для того, чтобы быть механизмом кэширования, и они не работают слишком хорошо, когда вы превращаете их в один.

Обратите внимание, что если вы используете обработчик сеансов по умолчанию, ваши сеансы хранятся вжесткий диск - не очень быстрый, когда вы получаете много одновременных запросов.Кроме того (тестирование и измерение), сериализация / десериализация может быть медленнее, чем обычные методы создания объекта - обратите внимание, что вам, вероятно, придется десериализоваться дважды: от сеанса к строке, затем к строке в объект этого класса.

Если вы хотите пойти по пути сериализации / десериализации, попробуйте, например, Memcached вместо этого.

2 голосов
/ 25 ноября 2010

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

1 голос
/ 28 июня 2011

Хранение экземпляров объекта в сеансе имеет следующие недостатки:

  • Снижение производительности : даже если вам не нужны некоторые объекты, они будут не сериализованы и установлены при каждом запросе.
  • Странные ошибки в разработке : всякий раз, когда вы добавляете или удаляете свойство из объекта, экземпляр из сеанса не будет соответствовать определению объекта.
  • Безопасность : Обычно данные сеанса хранятся отдельно от вашего приложения. Иногда это местоположение не так защищено и не защищено, как остальные ваши файлы.
  • Дублирование данных и неправильное состояние : С помощью сеансов вы можете снова и снова сохранять одни и те же объекты для разных пользователей. По сравнению с выделенным кешем объектов, где каждый объект хранится только один раз, это приводит к увеличению потребностей в хранении и возможности того, что объект имеет неправильное состояние, поскольку состояние было изменено в другом сеансе.

Я бы предпочел хранить объекты в выделенном кеше. Взгляните на класс Zend Cache в качестве примера хорошей библиотеки кеша.

Если ваш объект использует ресурсы (соединения с базой данных, файлы, образы gd), ваш класс должен реализовать интерфейс Serializable. Затем вам нужно добавить два метода, которые выполняют очистку и инициализацию.

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