+7 495 008 8452
  • Загрузка...
Выберите ваш цвет

Как минимизировать кэш меню на «Битрикс»?

Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Источник: 
Оставляя настройки кэширования по умолчанию, есть риск по мере увеличения числа страниц столкнуться со значительным ростом кэша меню. Наиболее это заметно на сайтах, где выпадающее меню отображает большое количество разделов и подразделов. Дело в том, что согласно исходным настройкам "Битрикс" создает для каждой страницы индивидуальный кэш меню. Например, на сайте 15000 карточек товаров, и для каждого автоматически создается кэш верхнего меню на 100 килобайт. В итоге получается 1500 мегабайт. Полтора гигабайта! Как же избежать бесполезной траты системных ресурсов и времени на загрузку?

1. Где в "Битрикс" определяется кэш меню?

Это делается в файле class.php по адресу /bitrix/components/bitrix/menu/class.php следующим кодом:

public function getCacheID($additionalCacheID = false)
   {
      /** @global CMain $APPLICATION */
      global $APPLICATION;
      /** @global CUser $USER */
      global $USER;

      $strCacheID = "";
      if($this->arParams["MENU_CACHE_TIME"])
      {
         if($this->arParams["CACHE_SELECTED_ITEMS"])
            $strCacheID = $APPLICATION->GetCurPage();
         else
            $strCacheID = "";
         $strCacheID .=
            ":".$this->arParams["USE_EXT"].
            ":".$this->arParams["MAX_LEVEL"].
            ":".$this->arParams["ROOT_MENU_TYPE"].
            ":".$this->arParams["CHILD_MENU_TYPE"].
            ":".LANGUAGE_ID.
            ":".SITE_ID.
            ""
         ;

         if($this->arParams["MENU_CACHE_USE_GROUPS"] === "Y")
            $strCacheID .= ":".$USER->GetGroups();

         if($this->arParams["MENU_CACHE_USE_USERS"] === "Y")
            $strCacheID .= ":".$USER->GetID();

         if(is_array($this->arParams["MENU_CACHE_GET_VARS"]))
         {
            foreach($this->arParams["MENU_CACHE_GET_VARS"] as $name)
            {
               $name = trim($name);
               if($name != "" && array_key_exists($name, $_GET))
                  $strCacheID .= ":".$name."=".$_GET[$name];
            }
         }

         $strCacheID = md5($strCacheID);
      }

      return $strCacheID;
   }


Конкретно кэш меню определяется в строках:

if($this->arParams["CACHE_SELECTED_ITEMS"])
   $strCacheID = $APPLICATION->GetCurPage();
else
   $strCacheID = "";


Пока параметр параметр CACHE_SELECTED_ITEMS включен, для каждой страницы создается свой кэш меню.

2. Теперь как его отключить?

Применим в файле class.php по адресу /bitrix/components/bitrix/menu/class.php следующий код:

<?$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
);?>



Готово!

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...