+8613426109659
webmaster@21cto.com

PHP 8.5 与 PHP 8.3 和 Node.js 的实际性能基准测试

编程语言 0 23 1天前
图片

导读:PHP 8.5 会让你惊喜,不论是实际速度、异步和 API开发。

我曾多次更换技术栈,出于好奇做过各种基准测试,也曾为了节省 20 毫秒而搞垮生产服务器。最近网上都在争论:PHP 的速度能和 Node 相媲美吗?随着 PHP 8.5 的发布,我想抛开营销噱头,解释一下真正影响异步任务和 API 速度的因素。

首先要说明的是:

PHP 8.5 在运行时和 JIT 方面带来了一些改进,但异步/API 吞吐量的最大提升来自于架构和运行时选择(Swoole/RoadRunner/Octane、连接处理以及 I/O 操作方式),而不是 PHP 的版本号。(数据来源:php.watch;Tideways 和 Kinsta 基准测试结果)。

8.3 到 8.5 版本之间有哪些变化


PHP 8.3 取得了显著的进步(JIT 成熟度、优化),许多框架也已经获得了大幅提升。

PHP8.5 专注于提升开发者的工作体验和一些运行时优化;它并非彻底重写,而是包含 JIT 和一些内部调整,可以略微改善 CPU 密集型工作负载的性能。实际应用中可能会看到一些小幅的改进,但默认情况下不会有两倍的速度提升。

异步与并发:Node 依然大放异彩——而 PHP 则奋起反击


Node.js 的核心运行时内置了事件循环和非阻塞 I/O。对于纯粹的 I/O 密集型工作负载(例如大量小型并发请求、WebSocket、流式传输),Node 通常更容易实现高并发和低单连接内存占用。(Techempower)

PHP 过去采用的是每个进程一个请求的模式。如今,PHP 可以在支持异步的长时间运行运行时环境中运行(例如 Swoole、RoadRunner、ReactPHP 和 Laravel Octane)。在这些运行时环境中运行 PHP 时,由于避免了冷启动,并且可以使用异步 I/O 和协程,因此它在异步任务方面更具竞争力。

实际的比较取决于具体的实现方式。

实际情况:如果使用标准的 PHP-FPM + Apache/Nginx,Node 在高并发 I/O 方面通常会胜出。如果使用 Swoole 或 RoadRunner 并优化代码,PHP 在许多 API 工作负载上可以与 Node 匹敌甚至超越,尤其是在 PHP 的 JIT 加速 CPU 密集型部分的情况下。(基准测试结果各不相同;许多社区测试的结果也存在一定差异)

3. 重要的基准(以及如何解读它们)


实际测试涵盖整个技术栈:网络、序列化、数据库、库等等。微基准测试(例如 Hello World 或 JSON echo)虽然能显示原始吞吐量,但可能会产生误导。Techempower 框架测试是进行框架级比较的更佳基准。

独立测试结果,显示如下:

Kinsta 和 Tideways:PHP 版本 8.2 至 8.4/8.3 对框架应用程序的改进非常显著;8.5 版本看起来只是小幅提升,而非飞跃式发展。升级是明智之举,但亦并非万能。
社区对 Swoole/Octane 的比较:使用 Swoole 或 Octane,PHP 在 API 的延迟和吞吐量方面可以达到与 Node 相近的水平——在某些特定场景下(例如字符串处理、CPU 密集型单线程任务),甚至有时优于 Node。但实际结果取决于核心数、工作线程模型以及瓶颈在于数据库还是网络。

我的实际思维实验


对于主要代理数据库调用的 API:使用连接池和 async/await 的 Node.js 结点,每个核心可能处理更多的并发任务。如果运行 PHP-FPM,则会生成更多进程并占用更多内存。如果使用 RoadRunner/Swoole 运行 PHP,则差距会变小。

请求中占用大量 CPU 资源的图像处理:PHP 8.3+ 的 JIT 改进和 8.5 的优化后,可以使 PHP 在处理 CPU 密集型部分时比 Node 更快。尽可能将繁重的工作卸载到后台任务,两种运行时环境都能够从中受益。

如果你正在为 API 和异步选择技术栈


选择合适的运行时:对于 PHP,如果需要持久工作进程和低延迟,请各位优先选择 Swoole、RoadRunner 或 Octane。

对实际工作负载进行基准测试,而不是使用简单的示例程序。使用真实的负载、数据库和相同的部署拓扑结构。Techempower 或单请求微基准测试只是起点。

监控内存和 CPU 使用情况:Node.js 可以针对每个连接高效利用内存;PHP 工作进程模型为了简化操作而牺牲内存使用,除非你使用长时间运行的工作进程。

性能分析:使用 Tideways、Xdebug 或 Node.js 分析器查找性能瓶颈;优化序列化或数据库访问通常比升级运行时环境更有效。

升级到 PHP 8.5 在安全性、性能小幅提升和新语言的易用性方面都是明智之举——但不要指望一次版本升级就能彻底解决 API 延迟问题。

对于异步操作较多的系统,架构(事件循环与工作进程、长时间运行的进程、非阻塞驱动程序)比版本号的细微变化更为重要。

Node 在原生非阻塞 I/O 的易用性方面保持优势;而 PHP 在采用 Swoole/Octane 并优化技术栈后,正在缩小与 Node 的性能差距。

作者:场长

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。