В /bitrix/components/bitrix/news.detail/component.php есть безусловный вызов CIBlockElement::CounterInc($arResult["ID"]);, который, в свою очередь, формирует и посылает в базу данных запрос примерно такого содержания:
UPD ATE b_iblock_element
SE T
TIMESTAMP_X = TIMESTAMP_X,
SHOW_COUNTER_START = ifnull(
SHOW_COUNTER_START,
now()
),
SHOW_COUNTER = ifnull(SHOW_COUNTER, 0) + 1
WHERE
ID = 6515
Таким образом, в таблице b_iblock_element увеличивается переменная SHOW_COUNTER.
Эта переменная далеко не всем нужна.
Не все её используют для изучаения числа просмотров, не всегда она выводится или используется. При использовании nginx с керированием, когда nginx кеширует не только статические файлы, но и динамичекские страницы, счетчик будет отображать неверные данные, и лучше считать обращения, используя анализатор логов nginx.
Я предлагаю опцию отключения модификации счетчика. Это избавит от лишних дорогих операций записи в базу и ускорит отображение элементов информационных блоков для тех, кому счетчики не нужны.
Предлагаю в параметры компонентов информационных блоков добавить еще один - "DISABLE_SHOW_COUNTERS". Если его значение равно „Y” – то счетчики не увеличиваются.
В /bitrix/components/bitrix/news.detail/component.php оборачиваем в условие вызов метода увеличения счетчкика. Код получится следующий:
if (!(array_key_exists("DISABLE_SHOW_COUNTERS", $arParams) && ($arParams["DISABLE_SHOW_COUNTERS"]=="Y";)))
{
CIBlockElement::CounterInc($arResult["ID"]);
}
В шаблонах, там, где идёт наследование параметров, добавляем и этот параметр. Например, в detail.php, там, где идёт следующий код
<?$ElementID = $APPLICATION->IncludeComponent(
"bitrix:news.detail",
"",
Array(
"DISPLAY_DATE" => $arParams["DISPLAY_DATE"],
добавляем наш новый параметр:
"DISABLE_SHOW_COUNTERS" => $arParams["DISABLE_SHOW_COUNTERS"],
а также добавляем его в те места нашего кода, где мы вызываем компонент информационных блоков, например в
<?$APPLICATION->IncludeComponent(
"bitrix:news",
добавляем
"DISABLE_SHOW_COUNTERS" => "Y",
Поддержка нового параметра проблем совместимости со старым кодом не вызвала, доработка кода – минимальная, а выигрыш – существенный: избавились от ненужного обращения к базе, тем более не просто обращения, а операции записи. Это, помимо прочего, удлинит жизнь SSD-дисков