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



Готово!

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

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