2010-05-28 108 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