Я знаю, что PHP-код скомпилирован в байт-код и повторно выполняется при каждом запуске (т.е. На каждом запросе страницы). Поэтому двигатель должен переопределять все используемые классы, функции, переменные и т.д. По каждому запросу.
При использовании полноэкранных фреймворков, таких как Laravel или CakePHP, это также означает, что при каждом запросе одна и та же операция начальной загрузки выполняется снова и снова, например, разбор файлов конфигурации, регистрация маршрутов, автозагрузка классов и т.д.
Это, по-видимому, очень неоптимальный способ обработки таких вещей. И даже кэширование, будь то система кэширования OPcache или системы, недостаточно полезна, так как сценарий еще нужно выполнить.
С другой стороны, приложение, основанное на таких двигателях, как NodeJS или Ruby, скомпилировано и загружено только один раз во время запуска. Поэтому я предполагаю, что они должны обладать лучшей масштабируемостью, чем PHP.
Но PHP настолько популярен, и даже Facebook использует его. Поэтому мне интересно, какой правильный выбор для веб-сайта, который может столкнуться с большой нагрузкой? Является ли использование PHP с полным стеком для этой цели плохая идея?
Я знаю, что PHP-код скомпилирован в байт-код и повторно выполняется при каждом запуске (т.е. На каждом запросе страницы). Поэтому двигатель должен переопределять все используемые классы, функции, переменные и т.д. По каждому запросу.
Начиная с PHP 5.5, кеш-код операции используется по умолчанию. До этого можно было использовать APC. Вы также можете использовать что-то вроде HHVM для дальнейшего повышения производительности с помощью JIT-компиляции (PHP 7 будет включать в себя аналогичные улучшения).
При использовании полноэкранных фреймворков, таких как Laravel или CakePHP, это также означает, что при каждом запросе одна и та же операция начальной загрузки выполняется снова и снова, например, разбор файлов конфигурации, регистрация маршрутов, автозагрузка классов и т.д.
Laravel (я не могу говорить для CakePHP) загружает только классы, когда они используются - большинство ваших классов никогда не будут загружаться в среднем запросе. Большая паранойя об использовании больших рамок, таких как Symfony/Laravel, - это просто паранойя.
Это, по-видимому, очень неоптимальный способ обработки таких вещей. И даже кэширование, будь то система кэширования OPcache или системы, недостаточно полезна, так как сценарий еще нужно выполнить.
Кэширование кода и каркасные кэши (файлы, Redis и т.д.) Предлагают огромные преимущества, которые вы довольно кавалеризируете здесь. Да, код должен быть выполнен для каждого запроса (хотя что-то вроде Varnish может уменьшить даже это), но такая вещь верна для любого языка и любой структуры.