Я знаю, что код 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 может уменьшить даже это), но такая вещь верна для любого языка и любой среды.
Других решений пока нет …