2013-06-20 32 views
1

我有一個應用程序,我反覆使用相同(大)類。由於我爲該應用程序使用AJAX,因此我總是必須創建此類的新對象。有人建議我緩存這個類的實例,並在需要時使用它(在php環境中使用apc)緩存某個類的實例有什麼好處?

它有什麼好處?它真的節省了一些時間嗎?

$this->tickets_persist = unserialize(@apc_fetch("Tickets")); 

    if (!$this->tickets_persist) { 
      $this->tickets_persist = new Tickets_Persistance(); // Take long time 
      apc_store("Tickets", serialize($this->tickets_persist)); 
    } 
+0

如果緩存速度更快,那就這樣做;如果創建實例的速度非常快,則沒有任何價值。可能會緩存對象實例的示例位於ORM中,因爲每個行對象(或結果集對象)都需要緩慢的數據庫查詢才能從頭開始重新創建。 – halfer

+0

什麼是「大」班?很多代碼?大量的數據?很多計算? – deceze

回答

5

只有在處理一個昂貴的實例化成本的類時,才能真正實現好處。如果在類的構造函數中需要花費大量時間,內存或其他資源(例如:讀取XML站點地圖並構建複雜的數據結構來構建導航),則可以通過利用緩存。

還值得注意的是,資源(如數據庫鏈接等)不能被緩存,並且在對象被反序列化之後必須重新建立資源(這裏是魔術方法出現的地方) 。

+1

謹慎評論downvote? – Orangepill

+0

感謝您的詳細解答,非常有用:) –

4

如果您的對象在實例化過程中需要大量處理,它將是值得的。緩存不會幫助您處理「大」對象,它會幫助您避免可以重複的處理。在你的情況下,如果你的構造方法需要大量的處理,這將是值得的。讓我們如何緩存會在網頁的環境中工作的例子:

  1. 在第一頁加載,實例化和緩存X小時對象
  2. ,爲下X小時的任何後續頁面加載,它將直接返回對象,而不處理實例
  3. X小時後,高速緩存對象將過期,下一個頁面加載會重新實例化對象,並重新緩存它

您的應用程序將在同一行爲唯一的區別是你會「重複使用」 「已經完成的實例化過程。

+1

感謝您的詳細解答,非常有用:) –

相關問題