Есть ли способ предварительно загружать (в отличие от автозагрузки) все классы/функции для проекта PHP?PHP - предварительная загрузка всех классов/функций
Я думаю о веб-приложении, которое работает с PHPFastCGI (чтобы мы могли загружать его часть и повторно использовать этот бит между запросами), и в котором используется композитор (может ли использоваться его кластерная карта для этой цели?).
Вот некоторый контекст:
«Regular» PHP приложение обрабатывает один запрос, а затем они убили. Предварительная загрузка всех классов/функций означает большую загрузку, автозагрузка только классов, используемых для запроса, - это умная оптимизация, но она может быть дополнительно улучшена (требуется много операций «read filesystem», которые медленны), обычно путем группировки в один файл классы, которые, вероятно, будут использоваться для всех запросов (это то, что решает ClassPreloader).
Однако при загрузке приложения обрабатывать только один запрос, а затем убить его не единственный вариант: с PHP FastCGI можно поддерживать приложение между запросами. Это позволяет нам сэкономить время загрузки с момента запроса/ответа (например, создать экземпляр всех служб из DIC один раз).
При профилировании моих приложений я заметил, что автозагрузка всегда появляется в 10 самых дорогих эксклюзивных вызовах функций. В приложении PHP FastCGI может иметь смысл перемещать загрузку классов на этапе загрузки, чтобы полностью удалить его из времени запроса/ответа. Я пытаюсь выяснить (я проведу бенчмаркинг и опубликую результат).
Для получения дополнительной информации об этом "экзотическом" способе запуска PHP-приложениях, см:
- Использования ReactPHP, чтобы сохранить приложение живой: http://marcjschmidt.de/blog/2014/02/08/php-high-performance.html
- Фабьна Potencier говорить об этом: https://youtu.be/gpNbmEnRLBU
- Использование PHPFastCGI чтобы FastCGI (например, php-fpm) управлял PHP-процессами: http://andrewcarteruk.github.io/slides/breaking-boundaries-with-fastcgi/
- Использование Aerys, не блокирующего HTTP-приложения: http://blog.kelunik.com/2015/10/21/getting-started-with-aerys.html
- Использование AppServer, собственного веб-сервера PHP: http://www.sitepoint.com/appserver-a-production-ready-php-based-server/
Проблема X/Y: почему вы хотите это сделать? – Andrea
@ Аndrea классы автозагрузки для каждого запроса с FastCGI кажутся пустой тратой, когда все они могут быть предварительно загружены один раз и повторно использованы между запросами. –
Пусть opcache обрабатывает его. – Andrea