是'长寿'的php对象可能吗?

时间:2010-08-11 07:49:09

标签: php oop

所以,我知道PHP中的一般思想是每次加载页面时都会加载并执行整个应用程序。但是为了优化需要移植的大型面向对象的PHP应用程序... 是否可以将对象加载到可用于每个请求的内存中,而不是为每个请求重新创建

我见过人们使用$_SESSION变量来做这样的事情,但这似乎是a)丑陋,b)会占用服务器上的大量空间,而c)不会真的做我需要的东西,因为它是一个会话式的东西。

有某种$_ALL_SESSIONS吗? ;)

(或者,从不同角度处理这个问题,每次使用标准Apache mod-php安装加载页面时,纯粹是静态对象加载到内存中吗?)

5 个答案:

答案 0 :(得分:3)

也许您可以将其序列化并将其存储在memcache中?我不知道那会更快。

答案 1 :(得分:3)

您或多或少在PHP中寻找等效的ASP / IIS Application object。 AFAIK没有一个。

有EG(persistent_list),一个“对象”列表,在提供请求后没有(必然)删除。它由mysql_pconnect(),pg_pconnect()等函数使用,但是脚本代码无法直接访问它。

memchache已被提及。你能详细说明“纯静态物体”吗?

答案 2 :(得分:1)

不是默认情况下,不是。您将不得不使用一些解决方法,无论是第三方工具(memcached,DBMS等),还是内置机制(会话,序列化到文件等)是否比重新创建对象更快每条记录都取决于你。

你也可以为此编写一个PHP插件。 :)或者也许已经有一个。一个快速的谷歌搜索没有透露,但我没有尝试。

如果您决定自己写一个,那么就知道它并不像听起来那么简单。例如,Apache等Web服务器会生成多个子进程,以便并行处理请求。你必须要把数据传递给他们很棘手。更不用说正确的锁定(如果请求挂起则锁定中断),Web服务器集群的处理等等。

答案 3 :(得分:1)

你可以做的是使用CLI的CLI版本来编写一个'守护进程'应用程序,该应用程序在请求和维护状态等之间保持不变,然后有一个常规的基于Web的脚本,可以通过套接字或其他一些机制与之通信( here's one example

答案 4 :(得分:0)

如果服务器是您自己的计算机,那么应该可以在后台运行一个可以执行“全局操作”的进程。您可以使用SOAP与它进行通信。

您只需要创建一个SOAP对象。

这是我看到真正为php创建一个长期存在的对象的唯一方法。其他一切都只是序列化。尽管如此,PHP之外可能还有一种技术。

老实说,我认为你的对象不够庞大和复杂,因此创建和填充的时间比进行SOAP调用所需的时间长。但是如果创建这个对象需要大量的数据库连接 - 那么我的想法可能会有所帮助......