首页 > 解决方案 > 是否可以在服务器端(PHP、Symfony)的 HTTP 请求之间共享对象?

问题描述

我想提高 Web 服务的性能,它需要创建一个无状态但非常大(就内存而言)的对象。这需要相当长的时间 - 0.3s。用加载序列化对象替换构造函数将时间缩短到 0.1 秒。有没有办法将这样的对象保存在 http 服务器内存(PHP,Symfony 4)中并在不同的 http 请求中使用它?

标签: phpperformancesymfony

解决方案


首先:这通常使用 Redis 或 Memcache 之类的键值存储来完成。但这并没有消除反序列化所需的时间,这可能是这里的瓶颈。

这取决于你的设置是什么。通常的“Web 服务器响应请求并通过 mod_php、CGI 或 FPM 启动 PHP”不能做到这一点。HTTP 是无状态的,PHP 进程相互隔离。如果您使用类似ReactPHP的 PHP 直接启动您自己的服务器,您可以共享内存,因为您的应用程序将始终“启动”,非常类似于 Java 服务器进程。但这会改变整个编程范式,因为突然之间您将不得不处理内存泄漏、多线程等问题。


推荐阅读