При работе над сайтом консалтинговой компании был создан раздел с услугами. Все услуги разделены на разделы и была поставлена задача в сайдбаре страницы описания услуги выводить другие стати из данного раздела, т.е. меню статей раздела.
Для вывода был использован компонент 1с битрикс catalog.section.list. Код вывода компонента выглядит примерно так:
Как оказалось вывод данного компонента кешируется не зависимо от установленных параметров. Т.е. не зависимо от значения параметра SECTION_ID всегда будет выводиться закешированное значение первого выполнения кода компонента. Поэтому на первое время кеш компонента битрикс был отключен: "CACHE_TYPE" => "N". Когда появилась свободная минутка решил разобраться и проверить.
Для вывода был использован компонент 1с битрикс catalog.section.list. Код вывода компонента выглядит примерно так:
IncludeComponent(
"bitrix:catalog.section.list",
".default",
array(
"IBLOCK_TYPE" => "main",
"IBLOCK_ID" => "3",
"SECTION_ID" => $_REQUEST["SERVICE_SECTION_ID"], // Задаем фильтр по идентификатору раздела
"SECTION_CODE" => "",
"COUNT_ELEMENTS" => "N",
"TOP_DEPTH" => "1",
"SECTION_FIELDS" => array(
0 => "ID",
1 => "NAME",
2 => "PICTURE",
3 => "",
),
"SECTION_USER_FIELDS" => array(
0 => "",
1 => "",
),
"SECTION_URL" => "",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600000",
"CACHE_GROUPS" => "Y",
"ADD_SECTIONS_CHAIN" => "N",
),
false,
array(
"HIDE_ICONS" => "Y"
)
);
Как оказалось вывод данного компонента кешируется не зависимо от установленных параметров. Т.е. не зависимо от значения параметра SECTION_ID всегда будет выводиться закешированное значение первого выполнения кода компонента. Поэтому на первое время кеш компонента битрикс был отключен: "CACHE_TYPE" => "N". Когда появилась свободная минутка решил разобраться и проверить.
Изучаем и исправляем компоненты битрикс
Хотя метод используемый для кеширования во всех bitrix компонента StartResultCache по умолчанию должен зависеть от текущего сайта SITE_ID, имени компонента, имени шаблона и входных параметров $arParams, но в данном компоненте зависимость от параметров явно отключена.
Смотрим код компонента catalog.section.list:
Смотрим код компонента catalog.section.list:
/*************************************************************************
Work with cache
*************************************************************************/
if($this->StartResultCache(false, ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups())))
{
if(!\Bitrix\Main\Loader::includeModule("iblock"))
{
$this->AbortResultCache();
ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
return;
}
Копируем код компонента битрикс - /bitrix/catalog.section.list в свое пространство имен.
Открываем файл component.php и меняем:
Открываем файл component.php и меняем:
if($this->StartResultCache(false, ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups())))
На:
if($this->StartResultCache(false, array(($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups()), $arParams)))
Т.е. просто добавляем параметры $arParams к вызову StartResultCache.
Тестируем 1с битрикс
Чтобы убедится в правильности и полезности решения выполним "Нагрузочный тест пиковой производительности (QP0060)" описание которого можно найти при прохождении тестов "Монитор качества" CMS 1С Битрикс:
Я запускал несколько раз по 2 минуты, привожу по одному варианту графиков. В целом видел улучшение результата в среднем на 6-9 сотых секунды. И более стабильные показатели для варианта компонента с кешированием.
1. Оригинальный вариант компонента без кеширования.
2. Вариант с кешированием относительно установленных параметров.
Действуем по инструкции битрикса и запускаем в двух вариантах.Выполнен нагрузочный тест максимальной производительности проекта - " Настройки > Производительность > Панель производительности > Масштабируемость" с исходными данными
- Начальное количество одновременных соединений = 1
- Конечное количество одновременных соединений = 5
- Шаг увеличения одновременных соединений = 1
- Максимальная продолжительность теста = 5 минут
- Страница = главная веб-проекта (например - /index.php). Можно выбрать любую посещаемую страниц веб-проекта.
Я запускал несколько раз по 2 минуты, привожу по одному варианту графиков. В целом видел улучшение результата в среднем на 6-9 сотых секунды. И более стабильные показатели для варианта компонента с кешированием.
1. Оригинальный вариант компонента без кеширования.
2. Вариант с кешированием относительно установленных параметров.
The 23 Best Casinos in San Diego (San Diego)
ОтветитьУдалитьCasinos and hotels in 밀양 출장샵 San Diego: A complete guide 광명 출장마사지 to San Diego casinos, 청주 출장안마 including opening 제주도 출장안마 hours, location maps, photos, and 의정부 출장샵 map.