Задать вопрос

Bitrix узнать какой файл кеша использовался для генерации страницы? Можно ли через api почистить кеш компонента у конкретного пользователя?

/!\Указал у вопроса теги 1С-Битрикс и Кеширование, если вопрос не относится к второму тегу пожалуйста удалите его.

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

Есть интернет магазин на bitrix в нём каталог. При выводе основного раздела каталога вызывается компонент, который внутри себя вызывает другие, так доходит до вывода конкретного товара(для отображения html каждого товара вызывается компонент catalog.item). Пишу всё это чтобы было понятно что вызов компонентов производится внутри другого по цепочке, таким образом закешироваться динамические данные могут выше компонента в котором они запрашиваются из БД.

В частности есть самописная библиотека для отображения лайков на товарах (код здесь, хотя к вопросу отношения не имеет - blog.ivru.net/?id=49 )

Так вот при нажатии на лайк запрос уходит на api меняет статут лайка(установлен снят), но при повторной загрузке страницы каталога информация не отображается, так как выводится кеш вышестоящего компонента и до запроса информации в файле result-modifier.php компонента catalog.item просто не доходит.

Тут такой момент, фактически сбросить кеш я могу в файле на который уходит ajax для изменения состояния. Например так BXClearCache(true, "/s1/bitrix/catalog.section/"); (проверено работает), вот только этот запрос почистит кеш всего catalog.section в том числе других пользователей у которых информацию можно было продолжать загружать из кеша.

Интересуют следующие вопросы:
1) есть ли возможность получить в процессе работы название файла кеша из которого была загружена страница? Тогда я бы просто удалил именно этот файл.
2) есть ли механизмы по управлению кешем компонента привязанные к пользователю?(я имею ввиду если сессии пользователя вдруг достаточно для того чтобы управлять именно его кешем, тогда в ajax запросе мне не нужно было бы даже передавать адрес файле кеша, если всё необходимое есть в сессии).
  • Вопрос задан
  • 1926 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
serginhold
@serginhold
Все что тебе нужно, не кешировать эти лайки, если это подразумевается, как пользователь добавил что-то в избранное. Иначе ты просто будешь кешировать дофига одной и той же информации, где разница только в ID пользователя.

а если под лайками подразумевается кол-во, т.е. 10 пользователей нажали, и рядом с кнопкой отображается число 10, то надо чистить кеш по ключу. В общем надо просто знать этот ключ, или папку.
Создаешь объект кеша, \Bitrix\Main\Data\Cache::createInstance(), и там есть методы очистки.
Ключ кеша в стандартных компонентах, как правило, зависит от пути в адресной строке. Хотя мог бы и сам в исходниках посмотреть..

В любом случае, проще всего создать свой компонент с этой кнопкой, и даже если в ней будет какой-то кеш, подключать этот компонент в обход общего кеша страницы/товара.
Ответ написан
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Если у вас кеш для каждого пользователя свой, то что то пошло не так. Такой кеш будет только сжирать место на диске и выигрыша в производительности скорее всего не будет.

Все что связано с отображением элементов идивидуальных для пользователя: кнопки сравнения, кнопки корзины, wish lists и т.п. - то все это лучше грузить через ajax. Вы таким образом страницу сможете отдать пользователю быстрее.

Про очистку кеша. В битриксе классов для работы с кешем много. Где и какой используется сказать можно только посмотрев исходный код компонента. Так же нет единого стандарта по формированию ключей кеша.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы