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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка кастомных AJAX-обработчиков 1С-Битрикс
Средний
~1-2 недели
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1322
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    915
  • 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
    663
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    811
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    710
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1043

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

В интернет-магазине на Битрикс под нагрузкой стандартные AJAX-запросы тормозят: каталог грузится 2–3 секунды, а корзина обновляется с задержкой. Причина — инициализация всего ядра при каждом запросе: модули, сессия, шаблоны. Это лишние 50–80 миллисекунд, которые превращаются в секунды на массовых операциях. Клиент уходит, конверсия падает. Мы решаем проблему кастомными AJAX-обработчиками: точечная инициализация, прямой доступ к данным, кеширование. Разработали уже 200+ таких эндпоинтов для магазинов с товарооборотом от 10 млн рублей в месяц. Опыт разработки Битрикс — более 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%. Клиент сэкономил более 1 миллиона рублей в год на серверных ресурсах.

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

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

$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.