Почему фреймворки MVC в PHP не сохраняются между запросами? - PullRequest
2 голосов
/ 03 апреля 2012

Что я смог понять из чтения исходного кода и документации из нескольких PHP-фреймворков, так это то, что они обычно не сохраняются, за исключением того, что вы лично кэшируете или добавляете в переменную $ _SESSION.Почему это?Кажется пустой тратой инициализировать структуру для каждого отдельного запроса, не лучше ли по крайней мере сериализовать и хранить некоторые основные объекты и переменные, чтобы сэкономить время и обработку?Сначала я думал, что это было довольно субъективно и избегал спрашивать, но все, что я прочитал, на самом деле не говорит об этом вообще, поэтому должно быть что-то очевидное, что я упускаю.Единственное реальное упоминание / обсуждение, которое я обнаружил, это здесь , которое не дает прямого ответа на мой вопрос, а некоторые из них немного затрагивают мою голову.

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

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Память:

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

Данные "Свежесть"

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

Надеюсь, это прояснит ситуацию.

0 голосов
/ 03 апреля 2012

Если вы хотите, чтобы данные сохранялись между запросами к серверу, вам необходимо использовать файлы cookie / сеансы или хранить свои данные в базе данных.Это просто способ, которым это работает.PHP не может хранить данные внутри себя для использования между запросами к серверу.

Некоторые платформы могут хранить основные объекты в базе данных или в локальном файле на диске, но это будет зависеть от среды.

...