Оптимизируем кэш меню — добавляем параметр CACHE_SELECTED_ITEMS => N, чтобы не плодить тысячи файлов
Хочу себе такие же кнопкиВведение: почему кэш меню важен и как небольшое изменение спасает сервер
Вы уже заметили, что при росте каталога товаров или структуре меню в Битриксе количество файлов в папке /bitrix/cache/ начинает «размножаться» до десятков тысяч. Каждый такой файл – отдельный запрос к файловой системе, а это значит:
- замедление генерации страниц, потому что ОС тратит время на поиск и открытие файлов;
- повышенная нагрузка на диск, особенно на SSD с ограниченным числом IOPS;
- риски потери кэша при чистке временных файлов.
Решение простое, но часто упускаемое: добавить параметр CACHE_SELECTED_ITEMS в вызов компонента меню. Он ограничивает количество кэшируемых вариантов выбранных пунктов, и вместо тысяч файлов создаётся лишь несколько десятков. Ниже – пошаговый разбор, как это сделать, и какие выгоды получит ваш сайт.
1. Что такое кэш меню в Битриксе
| Параметр | Описание | По умолчанию | Что происходит без ограничения |
|---|---|---|---|
| CACHE_TYPE | Тип кэша (A – автоматический, Y – всегда, N – отключён) |
A |
Кэшируется каждый запрос, но количество файлов не контролируется |
| CACHE_TIME | Время жизни кэша в секундах | 3600 (1 ч) |
После истечения времени кэш перезаписывается, но количество файлов остаётся |
| CACHE_SELECTED_ITEMS | Максимальное число вариантов «выбранных» пунктов, которые сохраняются в кэше | не задан (по умолчанию – всё) | При каждом изменении пути в меню генерируется отдельный файл, что приводит к их росту |
CACHE_SELECTED_ITEMS – это «фильтр» для кэша: он говорит компоненту, что хранить нужно только N самых популярных комбинаций пунктов, а остальные генерировать «на лету» без сохранения.
Аналогия: представьте библиотеку, где вместо того, чтобы копировать каждую книгу в отдельный ящик, вы храните только 10 самых часто выдаваемых книг в отдельном ящике, а остальные берёте из основной полки по запросу. Ящики (файлы) быстро открываются, а полка (база данных) справляется с редкими запросами.
2. Как добавить параметр в компонент меню
2.1. Где искать вызов меню
Обычно меню выводится в шаблонах через <?$APPLICATION->IncludeComponent( "bitrix:menu", "top", array( // параметры ), false );?>
2.2. Минимальный набор параметров с CACHE_SELECTED_ITEMS
<?$APPLICATION->IncludeComponent(
"bitrix:menu",
"top",
array(
"ROOT_MENU_TYPE" => "top",
"MAX_LEVEL" => "2",
"CHILD_MENU_TYPE"=> "left",
"USE_EXT" => "Y",
"DELAY" => "N",
"ALLOW_MULTI_SELECT" => "N",
// *** новый параметр ***
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
"CACHE_SELECTED_ITEMS"=> "30", // хранить лишь 30 вариантов
),
false
);?>```
> **Важно:** значение `30` – пример. Подбирайте его, исходя из количества «горячих» путей в вашем меню. Для небольших сайтов достаточно 10‑20, для крупных интернет‑магазинов – 50‑100.
#### 2.3. Что происходит после изменения
1. При первом запросе к меню генерируется кэш‑файл `menu_top_0_0.php` (для корневого уровня) и **до N** файлов для выбранных пунктов.
2. При изменении URL (например, переход от `/catalog/phones/` к `/catalog/tablets/`) Битрикс проверит, есть ли уже кэш‑файл для этой комбинации. Если количество уже превышает N, файл **не будет создан**, а меню соберётся «на лету».
3. Файлы, которые не попали в топ‑N, автоматически удаляются при очередной чистке кэша (по времени `CACHE_TIME`), что держит папку в порядке.
---
### 3. Как определить оптимальное значение N
| Сценарий | Пример количества «горячих» пунктов | Рекомендованное N |
|----------|----------------------------------------|-------------------|
| **Лендинг с 5‑ю пунктами** | 5 | 5‑10 |
| **Корпоративный сайт с 20‑м пунктами** | 20 | 20‑30 |
| **Интернет‑магазин с 200‑м пунктами** | 200 (только 30‑50 самых популярных) | 30‑50 |
| **Marketplace с тысячами категорий** | 5000+ (многие редкие) | 100‑150 |
**Методика подбора:**
1. Откройте **Статистику** в админке Битрикса → «Посещаемость страниц».
2. Сформируйте список URL‑ов, которые встречаются чаще всего (топ‑N).
3. Выберите N, покрывающее 80‑90 % всех запросов.
> **Плюс:** если после внедрения вы всё ещё видите рост файлов, уменьшите N или проверьте, не включён ли в кэш слишком много уровней (`MAX_LEVEL`).
---
### 4. Как проверить, что кэш уменьшился
1. **До изменения** – зайдите в `bitrix/cache/` и посчитайте файлы в подкаталоге `menu_`.
2. **После изменения** – выполните несколько запросов к разным разделам сайта, затем снова посчитайте.
```bash
find /path/to/bitrix/cache/ -type f -name "menu_*.php" | wc -l
Ожидаемый результат: количество файлов должно уменьшиться в 3‑5 раз (в зависимости от выбранного N).
5. Возможные подводные камни и как их избежать
| Проблема | Причина | Как исправить |
|---|---|---|
| Меню не меняется после правок | Кэш не сброшен | В админке → «Настройки» → «Очистка кэша», либо вызвать \Bitrix\Main\Data\Cache::clearAll(); вручную |
| Ошибка «Cannot open cache file» | Доступ к папке ограничен | Установите права 755 для bitrix/cache/ и 775 для подпапок |
| Слишком маленькое N → «медленное» меню в редких разделах | Компонент каждый раз генерирует меню без кэша | Увеличьте N до уровня, когда редкие разделы уже попадают в кэш, или включите CACHE_TYPE => "Y" для постоянного кэширования |
| Неправильный синтаксис массива | Пропущена запятая/кавычка | Проверьте PHP‑синтаксис, используйте IDE с подсветкой ошибок |
6. Как сочетать CACHE_SELECTED_ITEMS с другими оптимизациями
| Техника | Что делает | Как комбинировать |
|---|---|---|
Сжатие HTML‑вывода (ob_gzhandler) |
Уменьшает размер передаваемых данных | Не влияет на кэш‑файлы, но ускоряет загрузку страниц |
| Модуль «Оптимизация изображений» | Автоматически ресайзит и кеширует картинки | Кэш‑файлы меню остаются небольшими, а изображения быстрее отдаются |
| Redis‑кэш для запросов к базе | Хранит результаты SQL‑запросов в памяти | Позволяет уменьшить CACHE_TIME без потери скорости |
| Lazy‑load для JS/CSS | Загружает скрипты только при необходимости | Сокращает время первой отрисовки, а кэш‑файлы меню уже ускоряют построение DOM |
7. Пример полного конфигурационного файла шаблона
<?php
$menuParams = array(
"ROOT_MENU_TYPE" => "top",
"MAX_LEVEL" => "2",
"CHILD_MENU_TYPE" => "left",
"USE_EXT" => "Y",
"DELAY" => "N",
"ALLOW_MULTI_SELECT" => "N",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
// *** главное ***
"CACHE_SELECTED_ITEMS"=> "50", // хранить 50 самых популярных комбинаций
);
$APPLICATION->IncludeComponent(
"bitrix:menu",
"top",
$menuParams,
false
);
?>
Сохраните файл, очистите кэш и проверьте, как изменилось количество файлов.
8. Как мониторить состояние кэша в реальном времени
- Битрикс‑мониторинг – модуль «Система → Мониторинг», где можно добавить график количества файлов в папке
cache/menu_. - Скрипт‑cron – раз в час запускать:
<?php
$path = $_SERVER["DOCUMENT_ROOT"] . "/bitrix/cache/";
$files = glob($path . "menu_*.php");
echo "Файлов кэша меню: " . count($files);
?>
Отправляйте результат в лог или в Telegram‑бот для быстрого реагирования.
9. Как правильно документировать изменения
| Шаг | Действие | Где фиксировать |
|---|---|---|
| 1 | Добавлен параметр CACHE_SELECTED_ITEMS в шаблон top |
Git‑коммит с описанием «Оптимизация кэша меню» |
| 2 | Установлен N = 50 после анализа статистики | Тикет в системе управления задачами |
| 3 | Проведена очистка кэша и проверка количества файлов | Отчёт в Confluence/Google Docs |
| 4 | Настроен мониторинг количества файлов | Скриншот графика в мониторинге |
Эти записи помогут быстро восстановить прежнюю конфигурацию, если что‑то пойдёт не так.
Практика для закрепления
-
Определите N
- С помощью встроенной статистики Битрикса найдите топ‑10 самых посещаемых URL‑ов вашего сайта.
- Выберите значение
CACHE_SELECTED_ITEMS, покрывающее не менее 85 % всех запросов.
-
Внедрите параметр
- Откройте шаблон меню, добавьте
CACHE_SELECTED_ITEMSс выбранным числом. - Очистите кэш через админку и выполните 5‑10 переходов по разным разделам.
- Откройте шаблон меню, добавьте
-
Измерьте эффект
- Посчитайте количество файлов
menu_*.phpдо и после изменения (используйте командуfind … | wc -l). - Сформулируйте, насколько уменьшилось время генерации страницы (можно измерить с помощью Chrome DevTools → Network → “Load”).
- Посчитайте количество файлов
-
Проверьте на ошибку
- Сымитируйте ситуацию, когда пользователь переходит в редкий раздел, который не попал в топ‑N.
- Убедитесь, что меню отображается корректно, а кэш‑файл не создаётся.
-
Настройте мониторинг
- Добавьте в cron‑задачу скрипт, выводящий количество файлов кэша меню, и настройте оповещение в Telegram при превышении порога (например, 200 файлов).
Выполнив эти упражнения, вы не только поймёте, как работает CACHE_SELECTED_ITEMS, но и получите практический набор инструментов для контроля и поддержания «здорового» кэша меню на любом сайте, работающем на Битриксе.
Продолжайте экспериментировать: меняйте MAX_LEVEL, комбинируйте с CACHE_TIME и наблюдайте, как каждый параметр влияет на производительность. Так вы станете настоящим мастером оптимизации Битрикса и сможете быстро реагировать на рост нагрузки без лишних расходов на инфраструктуру.
Если нужен быстрый хостинг для тестов, обратите внимание на 🏰 VDSina – надёжный провайдер с гибкой тарифной сеткой. Подробнее о тарифах можно узнать здесь.
CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса