Срок работы пробной версии продукта истек. Через две недели этот сайт полностью прекратит свою работу. Вы можете купить полнофункциональную версию продукта на сайте www.1c-bitrix.ru. Случайные элементы и кеширование в Bitrix компонентах

Случайные элементы и кеширование в Bitrix компонентах

Случайные элементы и кеширование в Bitrix компонентах

Часто на проектах необходимо реализовать случайную выборку товаров, новостей или любых других материалов, но при этом не хотелось бы терять преимущества кеширования. Поставим задачу: необходим вывод случайных 3-х новостей с поддержкой кеша, но без "потери случайности". Далее рассмотрим один из вариантов реализации решения такой задачи.

Многие компоненты поддерживают сортировку с флагом RAND для вывода случайного элемента, но если мы будем кешировать такой компонент, например, на 10 минут, то вывод будет меняться только раз в 10 минут. Такой подход абсолютно правильный, но не совсем отвечает нашим хотелкам. При таком подходе мы "теряем" случайность ровно на время кеширования.

Стоит помнить, что в формировании ID кеша участвует полный набор входных параметров, т.е. массив $arParams. Это нам и поможет в решении поставленной задачи. Настроим компонент вывода трех случайных новостей:

$APPLICATION->IncludeComponent(
    "bitrix:news.list",
    "",
    Array(
        "IBLOCK_TYPE" => "news",
        "IBLOCK_ID" => "1",
        "NEWS_COUNT" => "3",
        "SORT_BY1" => "RAND", //Тут мы указываем, что надо случайные элементы
        "SORT_ORDER1" => "DESC",
        ...
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "600", //Кеш на 10 минут
        ...
    )
);

Это стандартная настройка компонента на вывод 3-х случайных новостей с кешированием на 10 минут, т.е. раз в 10 минут случайные элементы новостей будут меняться. Для того чтобы оставить "случайность", нам нужно добавить еще один параметр, например, назовем его RAND_NUMBER:

...
"RAND_NUMBER" => rand(1, 5)
...

Что делает эта строка? Все просто этот параметр случаен и таким образом у нас со временем будет 5 кешей со случайными новостями, которые будут меняться при каждом обновлении страницы. Мы можем поставить кеш не на 10 минут, а намного больше и увеличить количество кешируемых случайных наборов:

...
"CACHE_TIME" => "18000",
...
"RAND_NUMBER" => rand(1, 20)
...

При таком подходе к решению получаем:

  • Случайную выборку 3-х новостей.
  • Кеширование - мы не обращаемся к базе данных из этого компонента на каждом хите.
  • При каждом обновлении страницы мы видим 1 из 20 наборов случайных новостей.
 1462 Битрикс, Разработка, Компоненты, Кеширование
25 мая 2015
Команда BXCert

Наша команда разрабатывает портал BXCert, а также занимается разработкой сайтов на CMS 1С-Битрикс. Все участники являются сертифицированными специалистами Bitrix.

Возможно Вам будет интересно

Комментарии

Чтобы оставлять комментарии необходимо зарегистрироваться и пройти авторизацию.