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

Разработка кастомных AJAX-обработчиков 1С-Битрикс В интернет-магазине на Битрикс под нагрузкой стандартные AJAX-запросы тормозят: каталог грузится 2–3 секунды, а корзина обновляется с задержкой. Причина — инициализация всего ядра при каждом запросе: модули, сессия, шаблоны. Это лишние 50–80 милли
Услуги, которые мы предлагаем
Показано 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 Appointment Booking Widget for a Medical Center
    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С-Битрикс

В интернет-магазине на Битрикс под нагрузкой стандартные AJAX-запросы тормозят: каталог грузится 2–3 секунды, а корзина обновляется с задержкой. Причина — инициализация всего ядра при каждом запросе: модули, сессия, шаблоны. Это лишние 50–80 миллисекунд, которые превращаются в секунды на массовых операциях. Клиент уходит, конверсия падает. Мы решаем проблему кастомными AJAX-обработчиками: точечная инициализация, прямой доступ к данным, кеширование. Разработали уже 200+ таких эндпоинтов для магазинов с товарооборотом от $90k–130k в месяц. Опыт разработки Битрикс — более 10 лет. Ниже разбираем технику на реальных примерах.

Как инициализировать ядро Битрикс для 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 и скрейпинга.

Почему кастомный обработчик быстрее стандартного?

Сравнение с контроллером D7:

Критерий Кастомный обработчик Контроллер D7
Время инициализации 10-15 мс 50-80 мс
Структура кода Произвольная Стандартизованная
Тестируемость Сложнее Лучше
Поддержка новым разработчиком Сложнее Проще
Совместимость со старым кодом Лучше Требует рефакторинга

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

Кейс: обработчик быстрого запроса цен

Из нашей практики: в интернет-магазине нужно было обновлять цены на странице каталога в реальном времени при выборе опций. Стандартный компонент catalog.price инициализировал всё ядро и отдавал ответ за 200-300 мс. Мы написали кастомный обработчик, который получал ID товара и возвращал цену со скидкой, используя прямой SQL-запрос к таблице b_catalog_price. Время ответа снизилось до 15-20 мс. Дополнительно настроили кеширование на 60 секунд с тегированным сбросом при изменении цены. В итоге нагрузка на сервер упала в 5 раз, а пользовательская конверсия выросла на 12%. Клиент сэкономил более $9k–13k в год на серверных ресурсах.

Кеширование ответов

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

$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 и развёртыванию
  • Обучение вашей команды (по запросу)
  • Поддержка после сдачи (первые 30 дней бесплатно)

Сроки разработки

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

Свяжитесь с нами для предварительной оценки — рассчитаем срок и стоимость индивидуально. Получите консультацию по вашему проекту. Пишите: мы ответим в течение дня.

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