2010-05-28 29 views
0

我目前正在开发一个处理用户注册的大型网站。一个社交网站的论点。但是,我注意到页面加载的滞后性,并且认为它是在页面上创建的对象正在放慢速度。在PHP中缓存对象的最佳方法?

例如,我有一个Member对象,当使用作为构造参数传递的ID进行实例化时,它会在成员数据库表中查询数据库中该成员的行。不错,但这是每次加载页面时创建的;并在调用一组特定成员的朋友时调用不止一次,因为为每个朋友创建了一个新的成员对象。

因此,在一个页面上,我可以有七个相同的对象,但包含不同的属性。

我想要做的是找到一种方法来减少数据库负载,并允许页面加载之间的持久对象。例如,登录用户的对象将在登录时创建(我可以这样做),但随后存储在某处供检索,因此我不必在页面加载之间重新创建对象。

这是最好的解决方案是什么?我看了一下Memcache,但是由于它是第三方模块,所以我无法在这个场合安装它。在我的情况下,我的替代方案和/或最佳做法是什么?

在此先感谢。

+1

[PHP对象缓存]的可能重复(http://stackoverflow.com/questions/126917/php-object-caching) – 2010-05-28 18:35:58

回答

1

我认为缓存从数据库接收的数据通常会更好,而不是PHP对象本身。无论哪种方式,APCMemcacheXCache将是存储它的方式。

+1

为什么不是对象本身?您必须在每次请求时再次将DB数组转换为对象,并且仍然需要序列化/反序列化。 – 2010-05-28 18:53:04

+0

使用APC或MemCache时,该对象在添加到高速缓存时会自动序列化,并在读取时反序列化为 – 2010-05-28 19:55:33

0

如果您的缓存要求是关于用户/成员对象的,那么您最好打赌将其缓存在用户会话中。由于用户离线时不需要该对象;注销或会话超时将执行所有垃圾收集的内容。如果您需要更高的速度,您可以为会话存储后端使用缓存解决方案(即APC,Memcache等)。

如果您使用的是ORM,那么您可以直接缓存ORM对象,这样您甚至无需为了配置文件更新目的而重新获取它。

+0

感谢您的回答。然而,鉴于这个问题已经有三年了,现在我已经搬家了,不再继续工作;) – 2013-05-13 13:27:14

+0

不客气的马丁!我猜你已经移动了,但是想要为来自搜索引擎的其他人写回答;-) – Lashae 2013-05-14 05:28:19