20 окт. 2014 г., 7:07
Как обновлять кэш каталога, подкаталога, документа указав id?
Добрый день, вопрос думаю интересует многих новичков и не только, хотелось бы узнать каким образом можно было обновлять кэш конкретного документа, каталога, подкаталога и так далее. Зачем это нужно? Ну затем, что если весь сайт кэшируется, а у нас в магазине допустим решили к товару добавить цену или изменить её, а так как страницы изначально закэшированы, то необходимо обновить(или удалить) кэш конкретного товара(документа) ну и естественно все те каталоги и подкаталоги где выводится данный товар(документ)
Никак. Обсуждалось это здесь (и не только).
Ну почему сразу рубить корень, ведь мы можем создать кэш конкретной страницы или раздела а вот как это другой вопрос,
я приведу тут такой код который позволяет нам создавать кэш страницы или каталога
$id = 9; file_get_contents($this->modx->makeUrl($id, 'web', '', 'full'));
а для того что бы проверить можно
1) открыть Console, и вставить этот код
2) в правой части панели управления выбрать вкладку файлы
3) и в этой вкладке открываем по очереди core/cache/resource/web/resources/
4)в меню админки(смотрим в верх) наживаем Сайт->Обновить сайт(очистить кэш сайта)
5) как только кэш очистился в Console нажимаем Выполнить
6) обновляем правой кнопкой мыши core/cache/resource/web/resources/ и видим как создался кэш нужной страницы
Я даже не буду объяснять про зависимости и т.п. Если вам ооочень хочется двигаться именно в этом направлении - это ваше право.
про зависимости, что я имею ввиду, у меня есть страница с товаром на которой выводится данные из tv параметров, если в админке изменить цену в tv price, то так как страница изначально имеет кэш, то хоть как не обновляй страницу в клиентской части, то цена будет старой а если ручками удалить кэш страницы товара и в консоле вызвать тот код выше приведённый, то когда перейдём на страницу товара и обновим там уже новая цена, остался другой не решенный вопрос как удалить кэш страницы товара и подкаталога, но на этот вопрос я думаю можно найти решение
Спасибо за наводку, это на перспективу оставлю, так как времени на тесты и поиски тоже нужно не мало, но я нашел код который слегка дополнил одной строчкой и всё заработало, теперь можно удалять нужный нам кэш по указанному id, находку взял с сайта Василия Наумкина, я думаю он не будет против)))
сам код:
$id=9; $resource=$modx->getObject('modResource',$id); $resource->_contextKey = $resource->context_key; $cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource')); $key = $resource->getCacheKey(); $cache->delete($key, array('deleteTop' => true)); $cache->delete($key);
теперь можно указав id удалить, а потом заново с обновлёнными данными создать кэш страницы, теперь можно весь код объединить и использовать по своему усмотрению
По опыту скажу: это путь в никуда. Локальные решения, завязанные на жестком кешировании - это серьезный удар по всей логике сайта. Простой пример: единые прайсы. У вас товары - это отдельные страницы, а прайс - тоже отдельная страница. Почистили кеш страницы товара - а кеш прайса остался. Его надо тоже очищать - дополнительная логика. Потом на каком-нибудь крупном проекте это ощутите. Лучше прокачивайтесь в направлении снижения нагрузки на сайт в целом. И после сброса кеша 0.3-0.4 секунды - это вполне достигаемый результат. Смотрите вот даже на этот сайт. Здесь на одной странице куча блоков, в которых вывод данных из довольно большой базы, все с проверками прав и т.п., и практически все БЕЗ кеша, в риалтайме. Для разных пользователей с разными правами разные данные выводятся. Сайт разве тормозит?
Я согласен, что появляются очень много зависимостей, и я уже с этим сталкнулся, так как одно изменение требует эти обновления и на других страницах. да наткнулся на сайты которые просто уговаривали кэшировать для того что бы сайт просто летал. Необходимо оптимизировать и переписать функционал всего сайта, что бы отказаться от кэширования, и по этому случаю, изучаю ваши разработки которые в основном не используют кэширование и хотелось бы иметь, неплохую документацию по вашим продуктам и в одном месте, да кстати замерил даную страницу http://developers.google.com/speed/pagespeed показывает
По результатам тестирования время ответа вашего сервера составило 0,61 секунды
Да и спасибо за быстрый отзыв на вопросы, и за комментарии и советы
да кстати замерил даную страницу http://developers.google.com/speed/pagespeed показывает
Это время общее, включая пинг и т.п. А есть замеры на стороне самого сервера. Вот данные этой страницы:
Memory: 13.0902 Mb TotalTime: 0.4274 s
Но здесь хоть и не большая, но социальная сеть. Это один из крупнейших проектов, который приходилось делать (с учетом всех политик безопасностей, инфоблоков и т.п.). А средний корпоративный сайт или магазин вполне может работать быстрее.
да наткнулся на сайты которые просто уговаривали кэшировать для того что бы сайт просто летал
Берите на вооружение эту технологию :).