Опубликовано Оставить комментарий

Часть вторая «сайт тормозит» или кэш в YII1

Как использовать кэш в YII1 .

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

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

Контроллер YII1
Типичный контроллер 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мс.

Бинго !
 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *