Розробка кастомних AJAX-обробників 1С-Бітрікс

Розробка кастомних AJAX-обробників 1С-Бітрікс Маємо 10+ років досвіду та понад 200 реалізованих AJAX-ендпоінтів. В інтернет-магазині на Бітрікс під навантаженням стандартні AJAX-запити гальмують: каталог завантажується 2–3 секунди, а кошик оновлюється із затримкою. Причина — ініціалізація всього
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка кастомних AJAX-обробників 1С-Бітрікс
Середній
~1-2 тижні

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1018
  • 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
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    803
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

Розробка кастомних AJAX-обробників 1С-Бітрікс

Маємо 10+ років досвіду та понад 200 реалізованих AJAX-ендпоінтів. В інтернет-магазині на Бітрікс під навантаженням стандартні AJAX-запити гальмують: каталог завантажується 2–3 секунди, а кошик оновлюється із затримкою. Причина — ініціалізація всього ядра при кожному запиті: модулі, сесія, шаблони. Це зайві 50–80 мілісекунд, які перетворюються на секунди на масових операціях. Клієнт іде, конверсія падає. Ми вирішуємо проблему кастомними AJAX-обробниками: точкова ініціалізація, прямий доступ до даних, кешування. Кастомний обробник у 5 разів швидший за стандартний D7-контролер. Розробили вже 200+ таких ендпоінтів для магазинів зі значним товарообігом. Наш досвід розробки Бітрікс — понад 10 років, ми сертифіковані партнери 1С-Бітрікс. Нижче розбираємо техніку на реальних прикладах.

Як створити кастомний AJAX-обробник: покрокова інструкція

  1. Створіть файл обробника у /local/ajax/ або /bitrix/ajax/.
  2. Визначте константи, щоб вимкнути непотрібну ініціалізацію: NO_KEEP_STATISTIC, NO_AGENT_STATISTIC, DisableEventsCheck.
  3. Підключіть прототип prolog_before.php та лише необхідні модулі через Loader::includeModule.
  4. Реалізуйте логіку відповіді: валідація запиту, виконання дії, формування JSON.
  5. Забезпечте безпеку: CSRF (check_bitrix_sessid()), перевірка прав доступу, типізація параметрів, rate limiting.
  6. Налаштуйте кешування для даних, що рідко змінюються, через керований кеш.

Ініціалізація ядра Бітрікс для AJAX

Стандартний header.php ініціалізує весь сайт — модулі, сесію, права, шаблони. Для AJAX-ендпоінта все це зайвий overhead. Кастомний обробник ініціалізує тільки необхідне:

<?php // /local/ajax/catalog-prices.php define('NO_KEEP_STATISTIC', true); // не пишемо статистику define('NO_AGENT_STATISTIC', true); // не запускаємо агентів define('DisableEventsCheck', true); // пропускаємо частину ініціалізації require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'; // Тільки необхідні модулі \Bitrix\Main\Loader::includeModule('catalog'); \Bitrix\Main\Loader::includeModule('sale'); 

Такий підхід скорочує час ініціалізації з 50–80 мс до 10–15 мс на холодному старті. Для ендпоінта, який викликається 1000 разів на хвилину, економія становить до 70% процесорного часу.

Як забезпечити безпеку кастомного обробника?

Безпека будується на декількох рівнях. CSRF-захист — обов'язковий check_bitrix_sessid(). Валідація — кожен параметр приводиться до типу і перевіряється діапазон. Rate limiting — для публічних ендпоінтів обмежуємо кількість запитів з однієї IP (наприклад, не більше 10 на секунду).

Приклад структури обробника:

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); die(json_encode(['error' => 'Method Not Allowed'])); } if (!check_bitrix_sessid()) { http_response_code(403); die(json_encode(['error' => 'CSRF check failed'])); } global $USER; if (!$USER->IsAuthorized()) { http_response_code(401); die(json_encode(['error' => 'Unauthorized'])); } $action = $_POST['action'] ?? ''; $result = match($action) { 'get_price' => getPriceAction((int)($_POST['product_id'] ?? 0)), 'check_stock' => checkStockAction((int)($_POST['product_id'] ?? 0)), default => ['error' => 'Unknown action'], }; header('Content-Type: application/json; charset=utf-8'); echo json_encode($result, JSON_UNESCAPED_UNICODE); 

Валідація кожного параметра — явна типізація та перевірка прав через CIBlockElement::GetPermission. Помилки логуються в \Bitrix\Main\Diag\Debug::writeToFile, клієнт отримує лише загальне повідомлення.

Rate limiting реалізується через APCu або Redis. Для авторизованих користувачів ліміт вищий (100 запитів на хвилину), для анонімів — жорсткіший (20 запитів на хвилину). Це захищає від DDoS та скрейпінгу.

Чому кастомний обробник швидший за стандартний?

Кастомний обробник у 5 разів швидший за стандартний D7-контролер. Порівняння з контролером D7:

Критерій Кастомний обробник Контролер D7
Час ініціалізації 10-15 мс 50-80 мс
Структура коду Довільна Стандартизована
Тестованість Складніше Краще
Підтримка новим розробником Складніше Простіше
Сумісність зі старим кодом Краще Вимагає рефакторингу

Для нових проєктів рекомендуємо починати з контролерів D7 і переходити на кастомні обробники тільки для критичних за продуктивністю ендпоінтів. Ми часто використовуємо гібридний підхід: частина логіки на D7 для простоти, частина — на кастомних обробниках для швидкості.

Кейс: обробник швидкого запиту цін

Із практики: в одного з наших клієнтів, інтернет-магазину з великим товарообігом, потрібно було оновлювати ціни на сторінці каталогу в реальному часі при виборі опцій. Стандартний компонент catalog.price ініціалізував все ядро і віддавав відповідь за 200-300 мс. Ми написали кастомний обробник, який отримував ID товару і повертав ціну зі знижкою, використовуючи прямий SQL-запит до таблиці b_catalog_price. Час відповіді знизився до 15-20 мс. Додатково налаштували кешування на 60 секунд із тегованим скиданням при зміні ціни. У підсумку навантаження на сервер впало в 5 разів, а користувацька конверсія зросла на 12%. Це дозволило значно зменшити витрати.

Кешування відповідей

Для даних, що рідко змінюються (характеристики, залишки), використовуємо керований кеш Бітрікс:

$cacheManager = \Bitrix\Main\Application::getInstance()->getManagedCache(); $cacheKey = "product_attrs_{$productId}"; if (!$cacheManager->read(3600, $cacheKey)) { $data = loadProductAttributes($productId); $cacheManager->set($cacheKey, $data); } else { $data = $cacheManager->get($cacheKey); } 

Теговане скидання — при зміні товару кеш анулюється автоматично. Це дає актуальність даних без зайвих запитів.

Приклад налаштування rate limiting через APCu
$ip = $_SERVER['REMOTE_ADDR']; $key = "rate_limit_{$ip}"; $limit = 20; // запитів на хвилину для анонімів $interval = 60; if (apcu_exists($key)) { $count = apcu_inc($key); if ($count > $limit) { http_response_code(429); die(json_encode(['error' => 'Too Many Requests'])); } } else { apcu_add($key, 1, $interval); } 

Що входить у розробку кастомного AJAX-обробника?

  • Проєктування архітектури та вибір ендпоінтів
  • Написання коду з точковою ініціалізацією ядра
  • Реалізація CSRF, авторизації, валідації та rate limiting
  • Кешування відповідей із тегованим скиданням
  • Інтеграція з існуючими компонентами та модулями
  • Тестування продуктивності та безпеки
  • Документація з API та розгортання
  • Навчання вашої команди (за запитом)
  • Гарантія на код — 12 місяців
  • Вартість базового набору (5–10 ендпоінтів) — від 30 000 грн.

Терміни розробки

Масштаб Склад Термін
Базовий 5–10 ендпоінтів + CSRF + базове кешування 1–2 тижні
Середній + rate limiting + детальне логування + тести 2–4 тижні
Розширений + гібридний підхід (частина на D7, частина кастомні) + моніторинг 4–6 тижнів

Зв'яжіться з нами для попередньої оцінки — розрахуємо термін і вартість індивідуально. Отримайте консультацію по вашому проєкту. Пишіть: ми відповімо протягом дня.

Технологія AJAX описана на Wikipedia, а документація по компонентах Бітрікс — на dev.1c-bitrix.ru.