Зачем нужна программная очистка кэша?
При работе с 1С-Битрикс кэширование ускоряет загрузку страниц, но иногда данные устаревают. Ручная очистка через админку не всегда удобна, особенно при:
-
Массовых импортах (товары, цены, остатки)
-
Автоматических процессах (CRON, агенты)
-
Частых обновлениях (акции, новости)
-
Разработке (чтобы изменения сразу отображались)
Программная очистка кэша решает эти проблемы, автоматизируя процесс.
Полная очистка кэша в Битрикс (PHP-функция)
1. Базовая очистка (файловый кэш, ManagedCache, стековый и композитный кэш)
function clearBitrixCache() {
// Очистка файлового кэша
BXClearCache(true);
// Очистка ManagedCache (кэш в БД, memcached/redis)
if (class_exists('\Bitrix\Main\Data\ManagedCache')) {
(new \Bitrix\Main\Data\ManagedCache())->cleanAll();
}
// Очистка стекового кэша
if (class_exists('\CStackCacheManager')) {
(new \CStackCacheManager())->CleanAll();
}
// Очистка композитного кэша (статического HTML)
if (class_exists('\Bitrix\Main\Composite\Page')) {
\Bitrix\Main\Composite\Page::getInstance()->deleteAll();
}
return true;
}2. Дополнительная очистка (изображения, CSS/JS, CDN)
function clearExtendedBitrixCache() {
clearBitrixCache(); // Базовая очистка
// Очистка кэша ресайза изображений
if (is_dir($_SERVER['DOCUMENT_ROOT'] . '/upload/resize_cache')) {
BXClearCache(true, '/upload/resize_cache');
}
// Очистка оптимизированных CSS/JS (если включено ускорение сайта)
if (class_exists('\Bitrix\Main\Page\Asset')) {
\Bitrix\Main\Page\Asset::getInstance()->removeAll();
}
// Обновление CDN (если используется)
if (class_exists('\Bitrix\Main\Composite\Helper')) {
\Bitrix\Main\Composite\Helper::updateCDNConfig();
}
return true;
}3. Обработка ошибок и логирование
Чтобы отслеживать проблемы, добавьте логирование:
function clearBitrixCacheWithLog() {
try {
clearExtendedBitrixCache(); // Используем расширенную очистку
AddMessage2Log('Кэш успешно очищен', 'cache_clear');
return true;
} catch (Exception $e) {
AddMessage2Log('Ошибка очистки кэша: ' . $e->getMessage(), 'cache_clear');
return false;
}
}Где использовать эти функции?
1. В обработчиках событий
Пример: очистка кэша после импорта товаров.
AddEventHandler('catalog', 'OnAfterProductUpdate', 'clearBitrixCacheWithLog');2. В агентах (по расписанию)
Настройте агент в Админке → Инструменты → Агенты.
// Агент для очистки кэша раз в сутки
function clearCacheAgent() {
clearBitrixCacheWithLog();
return "clearCacheAgent();"; // Планируем повторный запуск
}3. В CRON-задачах
Добавьте в cron.php или отдельный скрипт:
if (date('H') >= 2 && date('H') <= 4) { // Очистка ночью
clearBitrixCacheWithLog();
}Рекомендации по оптимизации
Для высоконагруженных сайтов:
-
Очищайте кэш постепенно (по разделам, а не весь сразу).
-
Используйте очередь задач (например, через \Bitrix\Main\Queue).
Для CDN:
-
Если сайт использует Cloudflare или другой CDN, может потребоваться дополнительный API-вызов для сброса кэша.
Для разработки:
-
Добавьте очистку кэша в dev-режиме автоматически.
Вывод
Программная очистка кэша в 1С-Битрикс избавляет от ручных действий и поддерживает актуальность данных. Используйте готовые функции в агентах, CRON или обработчиках событий для автоматизации.
Дополнительные материалы:
Внедрите эти решения, и ваш сайт будет работать быстрее без устаревших данных!