Pull to refresh

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

Reading time2 min
Views925
В документации 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 с моего блога
Tags:
Hubs:
Total votes 7: ↑5 and ↓2+3
Comments6

Articles