Найти тему
АКАМ:CRM

Использование фоновых заданий 1С для ускорения работы HTTP запросов

Оглавление
Делимся примером ускорения процессов обмена при использовании HTTP сервисов с использованием фоновых заданий 1С
Делимся примером ускорения процессов обмена при использовании HTTP сервисов с использованием фоновых заданий 1С

Автор: Анастасия Петрова

При работе с http запросами может встретится проблема с прерыванием соединения или торможению работы. Если такая проблема встречается, то один из способов ее решения это использование фонового задания.

На одном из проектов имеется интеграция с приложением. Когда клиент делает определенные действия, то в 1С приходит информация об этом по http запросу. После обработки данных, обратно отправляется ответ полученным http запросом. Время ожидание 60 секунд и увеличить нельзя.

-2

Схема работы обмена 1С с мобильным приложением

На примере данного проекта рассмотрим случае, в которых использование фоновых заданий помогли ускорить время выполнения http запроса.

Первый пример

Когда клиент первый раз заходит в приложение, то указывает фамилию, имя и телефон. После этого в 1С по http запросу приходят эти данные. В ответ на запрос отправляем идентификатор либо найденного, либо созданного клиента. Идентификатор отправляем, чтобы после происходил обмен данными между приложением и 1С.

При тестировании было замечено, что соединение периодически прерывается, и не успевает отправиться ответ на запрос, так как время ожидания ответа выходит. Прерывание происходит только тогда, когда  создается новый клиент. Долгое время занимает поиск клиента по номеру телефона (так как в базе более 100 тысяч клиентов)  и создание клиента, если это требуется.

Для ускорения отправки ответа на запрос после того, как понимаем, что с таким номером телефона клиента нет, то генерируем идентификатор и отправляем. Процедуру создания клиента запускаем с помощью фонового выполнения.

УникальныйИдентификатор = Новый УникальныйИдентификатор(); 
ДанныеДляСоздания = Новый Массив();
ДанныеДляСоздания.Добавить(Имя); 
ДанныеДляСоздания.Добавить(Фамилия);
ДанныеДляСоздания.Добавить(Отчество);
ДанныеДляСоздания.Добавить(Телефон);
ДанныеДляСоздания.Добавить(УникальныйИдентификатор);
МетодСоздатьКлиента = "гк_HTTPСервис.СоздатьКлиента";
ФоновыеЗадания.Выполнить(МетодСоздатьКлиента, ДанныеДляСоздания);
Возврат Строка(УникальныйИдентификатор);

В процедуре создания клиента новому элементу присваиваем ранее сгенерированный идентификатор.

Функция СоздатьКлиента(Имя, Фамилия, Отчество, Телефон, Идентификато)
НоваяСсылка = Справочники.Партнеры.ПолучитьСсылку(Идентификато);
НовыйЭлемент = Справочники.Партнеры.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(НоваяСсылка)

Из-за того, что теперь не дожидаемся создания клиента, а отправляем идентификатор сразу, выполнение запроса ускорилось на 6 секунд, и тем самым перестал прерываться http запрос.

Второй пример

В мобильном приложение клиент заполняет анкету. Когда клиент отправляет заполненную анкету, в 1С приходят идентификаторы вопросов и ответов. В ответ на полученный запрос отправляем код выполнения 200, что означает, что данные получены.

В начале анкету создавали сразу и после отправляли ответ. При тестировании было замечено, что после отправки приложение зависает в среднем на 12 секунд, до получения ответа.

Для ускорения скорости выполнения запроса, сразу после получения ответов анкеты  отправляем ответ. Процедуру создание анкеты запускаем с помощью фонового выполнения.

ДанныеДляСоздания = Новый Массив();
ДанныеДляСоздания.Добавить(ПолученныеДанные);
МетодСоздатьАнкету = “гк_HTTPСервисДомилендВитрина.СоздатьАнкету”;
ФоновыеЗадания.Выполнить(МетодСоздатьАнкету, ДанныеДляСоздания);

После оптимизации алгоритма обработки полученных идентификаторов вопросов и ответов, средние время ожидание составило 4 секунды, тем самым ускорили выполнение на 8 секунд.

Подводя итог, первый подход можно использовать, когда нужно отправлять идентификаторы для дальнейших интеграций, второй подход - когда отправляется ответ 200, а от ожидания ответа тормозится работа пользователя.