2013-06-20 2 views
1

У меня есть приложение, в котором я неоднократно использую тот же (большой) класс. Поскольку я использую AJAX для этого приложения, мне всегда нужно создать новый объект этого класса. Кто-то посоветовал мне кэшировать экземпляр этого класса и использовать его всякий раз, когда это требуется (с использованием apc в среде php)Каковы преимущества кеширования экземпляров класса?

В чем преимущества этого? это действительно экономит время?

$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, поскольку каждый объект строки (или объект resultet) требует медленных запросов к базе данных, чтобы воссоздать с нуля. – halfer

+0

Что такое «большой» класс? Много кода? Много данных? Много вычислений? – deceze

ответ

5

Преимущества действительно реализованы только в том случае, если вы имеете дело с классом, который имеет дорогостоящую стоимость создания. Если в конструкторе класса есть много времени, памяти или другого ресурса, которые выполняются в конструкторе класса (например: чтение XML-карты сайта и построение сложной структуры данных для создания вашей навигации.), Вы можете уклониться от этого, используя кэширование ,

Стоит также отметить, что ресурсы (например, ссылки базы данных и такие) не могут быть в кэше, и они должны быть повторно установлены после того, как объект сериализации (здесь, где магический метод __sleep и __wakeup приходит) ,

+1

Хотите прокомментировать нижестоящий? – Orangepill

+0

спасибо за подробный ответ, очень полезно :) –

4

Это было бы полезно, если ваш объект требует много обработки во время создания экземпляра. Кэширование не поможет вам с «большими» объектами, это поможет вам, когда вы захотите избежать обработки, которую можно повторить. В вашем случае это стоило бы того, если бы ваш метод построения потребовал много обработки. Давайте рассмотрим пример того, как кэширование будет работать в контексте веб-страницы:

  1. На первой загрузке страницы, экземпляр и кэшировать объект для х часов
  2. На любой последующей загрузки страницы в течение следующих х часов, это непосредственно возвращает объект, без обработки экземпляра
  3. После х часов, кэшированный объект будет истек, следующая загрузилась страница будет повторно создать экземпляр объекта и повторно кэш это

Ваше приложение будет вести себя в том же Кстати, единственное различие заключается в том, что вы будете «повторно использовать «процесс создания экземпляра, который уже был выполнен.

+1

спасибо за подробный ответ, очень полезно :) –