Хорошо, поэтому я относительно наивна в своих знаниях о PHP VM, и в последнее время мне было интересно что-то в этом роде. В частности, как выглядит жизненный цикл запроса в PHP для веб-приложения. Я нашел здесь статью, которая дает хорошее объяснение, но я чувствую, что в этой истории должно быть больше.
Из того, что объясняет статья, скрипт анализируется и выполняется каждый раз, когда на сервер делается запрос! Мне это кажется сумасшедшим!
Я пытаюсь изучить PHP, написав небольшую микроархитектуру, которая использует многие функции PHP 5.3 / 5.4. Таким образом, я должен был подумать о том, какие статические средства и как долго действует статическая переменная класса. Я надеялся, что мое приложение может иметь этап настройки, который смог кэшировать его результаты в класс со статическими свойствами. Однако, если весь сценарий анализируется и выполняется на каждом запросе, я не вижу, как я могу избежать выполнения шагов инициализации приложения для каждого сервера, на котором выполняется запрос!
Я просто очень надеюсь, что мне не хватает чего-то важного здесь … Любое понимание очень высоко ценится!
Из того, что объясняет статья, скрипт анализируется и выполняется каждый раз, когда на сервер делается запрос! Мне это кажется сумасшедшим!
Нет, эта статья точна. Существуют различные способы кэширования результатов анализа / компиляции, но сценарий выполняется в полном объеме каждый раз. Никаких экземпляров классов или статических переменных не сохраняется в запросах. По сути, каждый запрос получает новую, никогда не исполняемую копию вашего приложения.
Я не вижу, как я могу избежать выполнения шагов инициализации приложения для каждого сервера, на котором выполняется запрос!
Вы не можете и не должны. Вы должны инициализировать свое приложение в каком-то пустое состояние для каждого запроса. Вы можете сериализовать связку данных в $_SESSION
которая сохраняется в запросах, но вы не должны, пока не найдете, что это действительно необходимо.
Я просто очень надеюсь, что мне не хватает чего-то важного здесь …
Кажется, вы ничего не беспокоитесь. Каждый сайт PHP в мире работает по-умолчанию по умолчанию, и огромное, огромное большинство никогда не беспокоится о проблемах с производительностью.
Нет, вы ничего не пропустили. Если вам нужно сохранить какое-либо состояние приложения, вы должны сделать это, используя DB, файлы, Memcache и т. Д.
Поскольку это может показаться сумасшедшим, если вы не привыкли к этому, иногда это полезно для масштабирования и других вещей – вы сохраняете свое состояние в некоторых других сервисах, поэтому вы можете легко запускать несколько экземпляров PHP-сервера.
Статическая переменная, как и любая другая переменная PHP, сохраняется только в течение срока действия скрипта и, как таковая, не «живет» нигде. Стойкость между выполнением сценариев обрабатывается с помощью обработчиков сеансов .