кеширование ajax-запроса
Ajax возвращается в ввиде json, можно ли в сниппете кешировать полученные данные и затем подставлять их в ответ return json_encode(array(тут массив данных))?
Комментарии: 12
$modx->cacheManager()
я уже читал это rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/caching
но не догоняю как можно применить для ajax
но не догоняю как можно применить для ajax
Если у вас есть сниппет, значит вы в нем можете проверять существование данных в кеше и возвращать их. Если отсутствуют — получать из базы и заносить в кеш.
это я тоже понял, но как мне хранить данные, которые надо вернуть в json? т.е. в сниппете возвращается так:
return json_encode(array(
массив данных
));
как хранить в кеше значения для каждого ключа?
по данным запроса формируете ключ типа
и обратная операция по ключу получаете значение из кеша…
md5($параметр1.$параметр2 и тд )
и сохраняете в кеш с этим ключем…и обратная операция по ключу получаете значение из кеша…
эммм… могли бы вы поподробней расписать?)
К примеру данные запроса — $d1,$d2,$d3
// записали в кеш
$modx->cacheManager->set('pre_'.md5( $d1,$d2,$d3 ), $data, 7200, $CacheOptions );
// взяли из кеша
$modx->cacheManager->get('pre_'.md5( $d1,$d2,$d3 ) , $CacheOptions );
$CacheOptions = array(
xPDO::OPT_CACHE_KEY => 'default/pre_'
);
// Проверяем, есть ли в кеше сгенерированные данные
$output = $modx->cacheManager->get($key);
if (empty($output)) {
// Генерируем данные
$output = array(
'success' => true,
'param' => 'value'
);
// Сохраняем данные в кеш
$modx->cacheManager->set($key,$output);
}
return $modx->toJSON($output);
вроде получилось. а как убедиться, что данные берутся именно из кеша? у меня apc
открой ручками файл кеша внеси в него изменения и посмотри что отдаст в ответ
у мя apc, нету файлов. но, судя по времени отклика, работает
Так-то круто получается :) Спасибо всем за помощь!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.