Сравнение опций внешнего интерфейса кеша: экономят ли они такое же количество ресурсов? - PullRequest
0 голосов
/ 09 июня 2011
Zend_Cache can be configured to cache several types of output, including 
the results of function calls, the results of object and static method calls, 
entire pages, and configuration data.

-Я сомневаюсь. Дан этот контроллер / структура представления:

Контроллер индекса:

class IndexController extends Zend_Controller_Action
{
 public function indexAction()
 {
  //Post is a db_table model
  $post_manager=new Post();
  $Post=$post_manager->getFirstPost();
  $this->view->post=$Post;
 }
}  

-Индексное представление:

echo $this->post->title;
echo $this->post->text;

Я мог бы решить, исправить меня, если неправильно, для кэширования моего набора записей RecordSet (непосредственно в моем контроллере индекса) или для кэширования моего вывода (в моем представлении index.phtml) с помощью внешнего интерфейса Output.

Вышеупомянутые решения экономят такое же количество ресурсов моей системы?

спасибо

Luca

1 Ответ

0 голосов
/ 09 июня 2011

Оба экономят вам ресурсы. Вы можете кэшировать любой из них или оба. Это сильно зависит от вашего точного кода. Некоторые структуры не могут быть кэшированы (на ум приходит SimpleXML - например, твиттер), поэтому вам необходимо кэшировать вывод.

Вы можете кэшировать звонки вашей модели. Вы можете кэшировать свой конфиг.

Но все же я думаю, что это своего рода преждевременная оптимизация (которая является корнем всего зла)

Обновление: Я бы выборочно кэшировал вывод.

В контроллере я бы просматривал элементы и проверял, есть ли у элемента кэш, если это так, присваивает его некоторой выходной переменной, в противном случае извлекает из БД. Затем на экране просмотрите предварительно загруженное значение или визуализируйте частичное. Я предполагаю, что рендеринг данных является узким местом.

Но, в конце концов, я думаю, что лучшее решение - это кэшировать весь вывод всего раздела сообщений. Если он меняется, как раз в день или даже раз в час, это огромная выгода. Я бы проверил в контроллере, существует ли кеш, если он есть, назначил его переменной представления и включил какой-нибудь флаг ($this->view->hasCachedPosts = true). Затем в поле зрения визуализируйте кэшированный ответ. Если кеш пропущен, загрузите необходимые данные. Также не забудьте вставить очистку кэша в методы обновления / удаления / вставки моделей.

Если у вас много изменений в минуту (огромная аудитория), может помочь даже кэширование 30-х годов. А если у вас небольшая аудитория, то кэширование должно длиться дольше.

Чем больше изменяется ваш контент, тем меньшие части необходимо кэшировать, чтобы большие порции не периодически становились недействительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...