Компонент menu в Битрикс имеет неприятную особенность. Он создает кеш для каждой страницы сайта. На масштабных проектах, содержащий большое количество страниц, речь может идти от сотнях мегабайт бесполезного кеша меню.
В поисках решения проблемы был изучен код из класса /bitrix/components/bitrix/menu/class.php.
Оказалось, что за построение кеша меню для каждой страницы отвечает параметр CACHE_SELECTED_ITEMS, отключив который мы получим требуемое поведение компонента. Вот тот самый фрагмент кода класса:
if($this->arParams["CACHE_SELECTED_ITEMS"])
$strCacheID = $APPLICATION->GetCurPage();
else
$strCacheID = "";
По умолчанию этот параметр включен. Поэтому при вызове компонента необходимо явно передать значение "N" для параметра CACHE_SELECTED_ITEMS.
$APPLICATION->IncludeComponent("bitrix:menu", "top", Array(
"ROOT_MENU_TYPE" => "top", // Тип меню первого уровня
"MENU_CACHE_TYPE" => "A", // Тип кеширования
"MENU_CACHE_TIME" => "3600", // Время кеширования
"MENU_CACHE_USE_GROUPS" => "N", // Учитывать права доступа
...
"CACHE_SELECTED_ITEMS" => "N", // Создавать кеш меню для каждой страницы
),
false
);
В итоге без кастомизации компонентов мы отключили построение кеша меню для каждой страницы сайта. Используйте в своих проектах.
Мы свяжемся с Вами в ближайшее время.
Комментарии