Скорость обмена 1С с сайтом: как заставить выгрузку каталога работать быстрее
Ситуация: в каталоге 50 000 товаров, и полная выгрузка цен и остатков из 1С на сайт занимает от 4 до 8 часов. Сервер зависает, менеджеры не могут работать, а актуальные остатки появляются на сайте только к утру. Знакомо? Разберем, "где узкое место" и как ускорить выгрузку в 5-10 раз.
🐌 Где "бутылочное горлышко" в архитектуре обмена?
Процесс обмена товарами по протоколу CommerceML (используется по умолчанию в Битрикс, InSales и др.) состоит из трех последовательных этапов. Тормозить может на каждом из них:
- Сборка (генерация) данных в 1С. 1С выполняет тяжелые SQL-запросы: выбирает все активные товары, их цены, рассчитывает остаток по регистрам на лету, собирает картинки из хранилища и формирует огромный XML-файл (или архив `import.xml` / `offers.xml`).
- Транспорт (передача файла). Файл (часто десятки и сотни мегабайт) закачивается на веб-сервер сайта. Чем хуже канал, тем дольше идет загрузка. Если HTTP-соединение обрывается — часть CMS просят начать все заново.
- Распаковка и запись на сайт (CMS). Сайт принимает XML-файл и начинает его построчно читать. Для каждого товара ищется совпадение по UUID. Если это 1С-Битрикс, то на каждое изменение товара сбрасывается кэш, что создает огромную нагрузку на БД веб-сервера.
⚡ 5 способов ускорить обмен 1С и Сайта
1. Включите "Выгрузку только изменений" (Only Changes)
Самая очевидная и самая частая ошибка — полная выгрузка каталога каждый день. Полная выгрузка нужна только 1 раз (при запуске сайта или жестком сбое интеграции).
На стороне 1С в узле обмена нужно включить "Выгрузка только изменений". В этом режиме 1С использует "Планы обмена": она помечает измененные объекты (например, пришел новый приходный ордер, или менеджер сменил цену). Выгрузятся только 50-100 товаров, что займет пару минут.
Во многих старых конфигурациях 1С (особенно в самописных или при использовании старых версий модулей обмена Битрикс) при изменении остатка программа "не видит", что товар изменился, если сам справочник "Номенклатура" не трогали. В результате новый остаток просто не летит на сайт. Эта проблема решается установкой официального свежего модуля "Обмен с интернет-магазином" от Битрикс (он умеет отлавливать записи регистров).
2. Разделите выгрузку на потоки
Каталог, цены+остатки и картинки — это три совершенно разных типа данных, которые меняются с разной частотой. Создайте в 1С 3 разных узла обмена (или настройте разные расписания в одном расширенном модуле):
- Обмен заказами: Работает каждые 5-10 минут (быстро и легко).
- Обмен ценами и остатками: Каждые 15-30 минут (только изменения).
- Полная структура каталога с картинками: 1 раз в сутки (ночью, когда на сервере никого нет).
3. ZIP-сжатие и разбиение файла (Zip & Split)
Если канал связи или PHP веб-сервера "задыхается", настройте в узле обмена 1С галочки: Сжимать отправляемые файлы (XML жмется в 10-15 раз!) и Разбивать файлы на порции (например, по 5-10 Мб).
Сайт будет "проглатывать" данные маленькими порциями: принял кусок 10Мб, распаковал, записал в БД, запросил у 1С следующий.
4. Оптимизация на стороне сайта (Битрикс)
Очень часто 1С формирует и отдает файл за 5 минут, а сайт его обрабатывает 3 часа. В настройках модуля интеграции Битрикса (на стороне админки сайта) нужно настроить:
- Шаг интеграции в секундах: (обычно 20-30 сек), чтобы PHP-скрипт не падал с 504 Gateway Time-out.
- Отключить "Сброс кэша каталога" при каждом товаре: Это убьет ваш сайт. Кэш каталога нужно сбрасывать только 1 раз, после завершения всего сеанса обмена всей партии (можно настроить в параметрах компонента Битрикса).
- Не деактивировать товары, пропавшие из выгрузки: Если у вас миллион товаров в базе, но только 50 тыс активных, поиск отсутствующих товаров в Битриксе съест 80% времени. Лучше выгружать из 1С признак "Нет в наличии" или нулевой остаток.
5. Переход с файлов на обмен по API
Если у вас > 200 000 товаров, огромные матрицы характеристик или высоконагруженный проект, файловый CommerceML больше не подходит. Требуется написание прямой интеграции: когда остаток или цена в 1С меняется, она *мгновенно* шлет HTTP-POST запрос (Webhook) напрямую в API-метод сайта (например, Laravel или Node.js бекенд), меняя конкретное поле в БД за 100 миллисекунд.
Обмен 1С с сайтом висит часами?
Проведу технический аудит узкого места: проверю тяжелые SQL-запросы при сборке пакета в 1С, настрою правильную выгрузку только изменений регистраций, оптимизирую шаг и кэширование на стороне CMS (Битрикс, WordPress, Laravel). Оставляйте заявку на аудит.
Получить консультацию →