运行时

Apache(prefork模式)+ mod_PHPApache(事宜模式)+ PHP-FPMNginx + PHP-FPMNginx Unit运用做事器Nginx Unit运用做事器Nginx + Roadrunner(fcgi模式)FrankenPHPFrankenPHP(worker模式)Swoole

所有运行时都基于官方Docker镜像。
如果不该用镜像,则在构建过程中将运用程序的代码复制到镜像中。
PHP 8.3无处不在,除了Nginx Unit。
2024年初,Nginx Unit支持的最高PHP版本为8.2。

不幸的是,我没有找到与Symfony 7兼容的最新版本的ReactPHP和AMPHP运行时。
PHPPM GitHub和Dockerhub看起来都被抛弃了。

phpworkerPHP运行时机能基准测试 AJAX

运用以下PHP和Symfony设置:

利用php.ini-production(附带官方Docker容器)已启用Opcache启用JIT根据Symfony最佳实践配置preloadComposer自动加载器已优化Symfony在生产模式下运行做事容器转储到单个文件Symfony缓存在容器构建期间预热

运用程序代码以及容器配置可以在GitHub https://github.com/DimDev/php-runtimes-benchmark上找到。

结果

001_Apache+mod_php和002_Apache + PHP-FPM显示了险些相同的结果。
003_Nginx+PHP-FPM在事情负载较低(并发10和100)时非常靠近001_Apache+mod_php和002_Apache + PHP-FPM。
003_Nginx+PHP-FPM在并发量为1000时,能够做事的要求数是Apache堆栈的2倍004_Nginx单元。
首先-哇!

它比传统和最盛行的003_Nginx+PHP-FPM快3倍我不认为005_Roadrunner和006_Nginx+Roadrunner之间有很大的差异只管如此,基于Roadrunner的堆栈比003_Nginx+PHP-FPM快2倍以上007_FrankenPHP(非事情模式)从性能角度来看非常靠近003_Nginx+PHP-FPM008_FrankenPHP(worker mode). Double WOW!
我不相信从第一次考试测验和运行负载测试3或4倍。
因此,当发送1000个并发要求时,FrankenPHP(工人模式)比Nginx+PHP-FPM快10倍。
同时,也面临着一个问题。
无法用php-ini. production启动容器。
009_swoole -也是双重WOW!
.险些与008_FrankenPHP(wm)相同的速率。
非常快。
但是,请记住,您的代码该当调度为与Swoole一起运行。
对付Symfony,我们有一个bundle,它扩展了symfony/runtime组件。