Как устранить долгий первый вызов HTTP или Web-запроса в базу 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие разработчики сталкиваются с ситуацией, когда первый запрос к опубликованному веб-сервису или HTTP-сервису 1С занимает значительное время (от 10 до 40 секунд), в то время как последующие обращения в рамках того же сеанса отрабатывают мгновенно. Это явление называют «холодным стартом». Разберем подробно причины такого поведения и проанализируем пошаговые инструкции по оптимизации системы для достижения максимальной производительности.

Анализ механизма первого подключения

Прежде всего, проведем анализ производительности и выясним причину задержки. Когда мы отправляем первый запрос, веб-сервер (например, IIS или Apache) должен инициализировать расширение 1С, запустить рабочий процесс, установить соединение с сервером 1С, проверить лицензии и создать сеанс информационной базы. Если в базе не настроен пул соединений или не используется утилита управления сеансами, то каждый такой «первый» запрос (после периода бездействия) будет проходить весь этот цикл заново. Рассмотрим, как сократить это время до минимума.

Шаг 1. Тонкая настройка файла публикации default.vrd

Основным инструментом управления сеансами веб-сервисов является файл default.vrd. В нем описываются параметры пула соединений. Проанализируем ключевые атрибуты, которые необходимо добавить или изменить в секции point:

Пример настройки пула в файле default.vrd может выглядеть следующим образом:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/MyBase"
       ib="Srvr=MyServer;Ref=MyBase;"
       enable="true"
       poolSize="10"
       poolTimeout="600"
       waitTimeout="5"/>

Шаг 2. Оптимизация на стороне IIS (Application Pool)

Часто причиной «тормозов» является сам веб-сервер IIS, который по умолчанию настроен на экономию ресурсов. Разберем настройки пула приложений (Application Pool):

  1. Откроем диспетчер служб IIS и перейдем в Application Pools.
  2. Выберем пул, на котором опубликована наша база, и зайдем в Advanced Settings.
  3. Найдем параметр Idle Time-out (minutes). По умолчанию там стоит 20 минут. Установим его в 0. Это предотвратит завершение рабочего процесса w3wp.exe при отсутствии активности.
  4. Установим Start Mode в значение AlwaysRunning. Это заставит процесс запускаться сразу после старта сервера, не дожидаясь первого пользователя.
  5. В настройках самого сайта (Site) включим Preload Enabled.

Шаг 3. Исключение задержек сетевой инфраструктуры

Посмотрим на ситуацию со стороны сети. Часто первый вызов тормозит из-за попыток разрешения имен или поиска прокси. Выполним следующие действия:

Шаг 4. Оптимизация модуля сеанса в 1С

Важно помнить, что при создании сеанса для HTTP-сервиса не выполняются обработчики ПриНачалеРаботыСистемы, но всегда выполняется обработчик УстановкаПараметровСеанса в модуле сеанса. Проанализируем код этого обработчика. Если в нем инициализируются тяжелые параметры (RLS, выборки из больших справочников), это замедлит каждый новый вход.

Применим проверку типа клиента, чтобы не выполнять лишний код для веб-запросов:


Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    
    // Если это внешний запрос, минимизируем нагрузку
    Если ПараметрыСеанса.ИмяТекущегоПользователя = "" Тогда 
        // Логика для анонимных или служебных HTTP-запросов
    КонецЕсли;

    // Инициализируем только то, что действительно нужно
    Если ТребуемыеПараметры = Неопределено Тогда
        // Тяжелая инициализация для обычных пользователей
    Иначе
        // Легкая инициализация по требованию
    КонецЕсли;
    
КонецПроцедуры

Шаг 5. Настройка поиска лицензий

Если сервер 1С тратит время на поиск лицензии в сети, первый запрос будет «висеть». Выясним причину: по умолчанию менеджер лицензий сканирует всю сеть широковещательными запросами. Для ускорения настроим файл nnhasp.ini на сервере, где установлен 1С:Предприятие.

Укажем конкретный адрес сервера лицензий и запретим поиск по сети:


[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100 ; IP вашего сервера с ключами
NH_TCPIP_METHOD = TCP
NH_USE_AS_MASTER = Disabled

Шаг 6. Стратегия «прогрева» сеансов (Warm-up)

Если после всех настроек первый вызов все равно кажется медленным, воспользуемся методом искусственного поддержания активности. Создадим простейшее регламентное задание или внешний скрипт, который будет раз в 5–10 минут отправлять пустой запрос (ping) к нашему HTTP-сервису. Это гарантирует, что сеанс в пуле всегда будет активен и готов к работе, а рабочие процессы IIS и 1С не уйдут в спящий режим.

Таким образом, мы рассмотрели комплексный подход к решению проблемы долгого первого отклика. Сочетание правильной настройки пула в default.vrd, оптимизация параметров IIS и исключение лишних действий в УстановкаПараметровСеанса позволяют сократить время отклика веб-сервисов до долей секунды даже при первом обращении.

← На главную