Как стать автором
Обновить

Уменьшаем кол-во запросов requestAction-ов с помощью Cache

Время на прочтение2 мин
Количество просмотров935
В документации Cakephp 1.2 говорится о том что если requestAction используется без кеширования, то это может уменьшить производительность.
If used without caching requestAction can lead to poor performance. It is rarely appropriate to use in a controller or model.
И правда, сами подумайте, каждый раз при просмотре сайта, кроме основных запросов, к базе делается куча мелких, с помощью requestAction-ов, например…
И как истинные политики, они говорят ЧТО может произойти, при этом не говоря КАК этого избежать.
Привожу пример того, КАК с этим разбираюсь я.

Коротко, о том как работает requestAction:
requestAction обычно используется вo view-файле (папка views). из view-файла, вы делаете запрос на другую страницу, и получаете значение.
синтаксис requestAction-а таков: $this->requestAction('/articles/home');
который говорит Cakephp что надо сделать запрос по адресу адрес.сайта.сom/articles/home
в самом контроллере к которому обращается requestAction надо прописать return;
function home(){
$out = $this->Article->find('all');
Cache::write('articleHome', $out);
return $out;
}


теперь мы можем смело дописать к $this->requestAction('/articles/home'); следующие строки

$out = Cache::read('articlesHome');
if(empty($out)){
$out = $this->requestAction('/articles/home');
}

После этого, мы один раз делаем запрос к базе, пишем все в файл. и остальные разы читаем из файла. Если в результате какие-то проблем со стороны НЛО мы не сможем прочитать файл из кеша, ничего страшного. Опять делаем запрос к базе, и опять пишем в файл (у попа была собака...)

и теперь при каждом обновлении этого списка, если мы что-то добавили/изменили не забываем перезаписывать Cache:
Cache::write('articleHome', $out);
crosspost с моего блога
Теги:
Хабы:
Всего голосов 7: ↑5 и ↓2+3
Комментарии6

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань