Детальний гайд: налаштування лічильника «Зараз дивляться» в Бітрікс

Уявіть: картка товару показує «Зараз дивляться 42 особи», а реальних відвідувачів на сайті — три. Через ботів і неоптимізований лічильник дані спотворюються, довіра падає, а сервер захлинається запитами. Ми налаштовували такий механізм десятки разів — від невеликих каталогів до проектів з мільйоном
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Детальний гайд: налаштування лічильника «Зараз дивляться» в Бітрікс
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1164

Уявіть: картка товару показує «Зараз дивляться 42 особи», а реальних відвідувачів на сайті — три. Через ботів і неоптимізований лічильник дані спотворюються, довіра падає, а сервер захлинається запитами. Ми налаштовували такий механізм десятки разів — від невеликих каталогів до проектів з мільйоном відвідувачів на місяць. Підхід має бути швидким, правдоподібним і не навантажувати сервер. Економія серверних ресурсів при використанні Redis замість MySQL — до 40%. Наприклад, для магазину з 10 000 унікальних відвідувачів на день використання Redis зменшує витрати на серверні ресурси на $20–50 на місяць.

Типові проблеми: застарілі дані (якщо оновлювати раз на хвилину — цифри втрачають актуальність), навантаження на БД при кожному запиті, спотворення статистики ботами. Без правильної фільтрації ботів лічильник може показувати 100+ «осіб», коли реальних відвідувачів одиниці. Оптимальне вікно активності — 5–10 хвилин, а мінімальний поріг виведення — 2 особи.

Як визначити «зараз дивляться»

Поняття «дивиться прямо зараз» — умовне. На практиці рахують користувачів, які відкрили сторінку товару за останні 2–15 хвилин (магазин обирає вікно самостійно). Типовий вибір: 5–10 хвилин.

Для зберігання активних переглядів використовується одна з двох стратегій: Варіант 1 — таблиця в MySQL/PostgreSQL. Створюється таблиця bl_product_viewers:

SQL код
CREATE TABLE bl_product_viewers ( id INT AUTO_INCREMENT PRIMARY KEY, product_id INT NOT NULL, session_id VARCHAR(64) NOT NULL, last_seen DATETIME NOT NULL, INDEX idx_product_time (product_id, last_seen) ); 

При кожному перегляді вставляється або оновлюється запис по (product_id, session_id). Для підрахунку: SELECT COUNT(DISTINCT session_id) WHERE product_id = ? AND last_seen > NOW() - INTERVAL 5 MINUTE. Агент очищення раз на 10 хвилин чистить застарілі записи.

Варіант 2 — Redis. Ключ viewers:product:{id} — це sorted set, де score = timestamp останнього візиту, member = session_id. Підрахунок: ZCOUNT viewers:product:123 (NOW-300) +inf. Застарілі записи видаляються через ZREMRANGEBYSCORE. Це швидше і не навантажує БД, але потребує Redis на сервері.

Чому варто використовувати Redis?

Redis забезпечує швидкість запису та читання менше 1 мс, що критично при тисячах одночасних переглядів. Він не навантажує MySQL, зберігаючи дані в оперативній пам'яті. Це знижує витрати на серверні ресурси та пришвидшує відгук AJAX-запитів. Redis обробляє запити в 5 разів швидше за MySQL.

Як реалізувати на стороні Бітрікс

У component_epilog.php детальної сторінки товару записується візит:

$productId = $arResult["ID"]; $sessionId = session_id(); $now = date("Y-m-d H:i:s"); $DB->Query("INSERT INTO bl_product_viewers (product_id, session_id, last_seen) VALUES (" . intval($productId) . ", '" . $DB->ForSql($sessionId) . "', '" . $now . "') ON DUPLICATE KEY UPDATE last_seen = '" . $now . "'"); 

Підрахунок активних переглядів виноситься в окремий AJAX-контролер — не варто робити SELECT в epilog, інакше кожен запит сторінки гальмуватиме на читанні.

Детальніше про роботу з component_epilog.

Як реалізувати AJAX-оновлення лічильника

Лічильник оновлюється на клієнті без перезавантаження сторінки. JavaScript-компонент робить запит кожні 30–60 секунд:

setInterval(() => { fetch('/ajax/product-viewers/?id=' + productId) .then(r => r.json()) .then(data => { if (data.count > 1) { document.querySelector('.viewers-count').textContent = 'Зараз дивляться: ' + data.count; } }); }, 30000); 

AJAX-обробник у Бітрікс реєструється через CModule::AddAutoloadClasses() або як окремий PHP-файл з включенням ядра через require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'.

Як виключити ботів з лічильника?

Ботів фільтрують за User-Agent у component_epilog.php перед записом. Використовуйте регулярний вираз, який перевіряє наявність рядків bot, crawler, spider тощо в заголовку. Це обов'язковий крок — без нього цифри завищуються на 30–40%. Для правильного налаштування сповіщення «дивляться товар» використовуйте фільтрацію ботів. Для вбудованих механізмів Бітрікс можна використовувати BITRIX_SESSID та перевірку IsUserAuthorized, але це не захищає від пошукових ботів.

Покрокова інструкція налаштування

  1. Вибір сховища: MySQL або Redis. Для малих проектів підійде MySQL, для високонавантажених — Redis.
  2. Створення структури даних: таблиці або Sorted Set у Redis.
  3. Реєстрація візиту: у component_epilog.php з фільтрацією ботів.
  4. AJAX-контролер: повертає JSON з кількістю активних переглядів.
  5. Клієнтський JS: оновлює лічильник кожні 30 секунд.
  6. Агент очищення: для MySQL — SQL-запит, для Redis — EXPIRE або фонове очищення.
  7. Налаштування порогів та відмінків: для гарного виведення.

Порівняння способів зберігання

Параметр MySQL/PostgreSQL Redis
Швидкість запису ~5 ms <1 ms
Швидкість читання ~3 ms (з індексом) <0.5 ms
Навантаження на сервер Середнє (диск I/O) Низьке (RAM)
Вимоги База даних Встановлення Redis
Масштабованість Горизонтально Вертикально

Етапи налаштування

Етап Опис Час
Аналіз Вибір вікна активності, визначення навантаження 2 години
Проектування Вибір сховища (MySQL/Redis), схема таблиці 1 година
Реалізація Запис візитів, AJAX-контролер, JS-компонент 4-6 годин
Тестування Перевірка з ботами, навантажувальне тестування 2 години
Деплой Розміщення агента, налаштування кешування 1 година

Що входить у налаштування

  • Створення таблиці bl_product_viewers (або налаштування Redis-ключів)
  • Запис візитів у component_epilog.php з фільтрацією ботів
  • AJAX-контролер для отримання актуальної кількості переглядів
  • JavaScript-компонент з періодичним оновленням лічильника
  • Агент очищення для видалення застарілих записів
  • Виведення блоку з правильними умовами (поріг, відмінювання)

Ми надаємо гарантію якості на всі роботи. Використання механізму терміновості підвищує конверсію картки товару. Звертайтеся до нас — ми реалізуємо цей механізм під ключ за 1–3 дні. Наша команда має більше 5 років досвіду з 1С-Бітрікс і десятки успішних проектів з кастомними лічильниками. Замовте налаштування — отримайте робочий лічильник за 24 години. Отримайте консультацію щодо вашого магазину.

Зв'яжіться з нами для консультації.