
Как использовать кэш в YII1 .
Итак в первой части я рассказывал о борьбе с медленным сайтом клиента и использовании программы XDEBUG. Сайт клиента до начала работы выдавал умопомрачительные 6-7секунд времени до загрузки первого байта и с помощью XDEBUG удалось найти и локализовать проблему. Время отдачи первого байта упало до приемлимых на мой взгляд 800-900мс, но клиенту этого показалось мало и он решил вывести время ответа сайта по основным своим страницам каталога в район 200-300мс, а значит можно попробовать использовать кэш в YII1 .
Проведя анализ всех обращений к БД на этих страницах ничего криминального я не нашел, все запросы достаточно просты, минимум связей и на все нужные поля существуют одинарные либо составные индексы.

Погрузившись в изучение каталога и клиентских запросов к нему , я увидел , что данные в каталоге остаются не меняются. А обращение к ним идет довольно таки интенсивное и у меня тут же возникла мысль использовать кэширование , чтобы минимизировать время отдачи одного и того же контента клиентам.
Кэш в YII1
Изучив нужные мне view-шки на предмет кода решаю внедрить примерно одинаковые конструкции отличющиеся только разными зависимостями и названиями ИД кэшей.
if($this->beginCache('car'.$model->id.'type'.$type.'page'.$page, array('duration'=>60*60*24*365,'dependency'=>array( 'class'=>'system.caching.dependencies.CDbCacheDependency', 'sql'=>'SELECT update_at FROM katalog_vavto_items WHERE cathegory_id=:cathegory_id order by update_at desc limit 1', 'params'=>array(':cathegory_id'=>$model->id), )))) { // здесь какой то контент который нужно закэшировать $this->endCache(); }
Если вкратце, то кэшируем разные страницы модели и ее типов на год ( ‘duration’=>60*60*24*365), а вторым условием использования кэша делаем проверку на изменение или добавление какой либо карточки принадлежащей модели (атрибут update_at который изменится если вдруг в какую то карточку внесут изменения или добавят новую ).
Проворачиваем такой фокус со всеми нужными страницами каталога, смотрим, что страницы пагинации тоже правильно кэшируются и отображаются. Делаем контрольные замеры и получаем время ответа сервера 250-300мс.
Бинго !