Использование фоновых заданий 1С для ускорения работы HTTP запросов
При работе с http запросами может встретится проблема с прерыванием соединения или торможению работы. Если такая проблема встречается, то один из способов ее решения это использование фонового задания.
На одном из проектов имеется интеграция с приложением. Когда клиент делает определенные действия, то в 1С приходит информация об этом по http запросу. После обработки данных, обратно отправляется ответ полученным http запросом. Время ожидание 60 секунд и увеличить нельзя.
Схема работы обмена 1С с мобильным приложением
На примере данного проекта рассмотрим случае, в которых использование фоновых заданий помогли ускорить время выполнения http запроса.
Первый пример
Когда клиент первый раз заходит в приложение, то указывает фамилию, имя и телефон. После этого в 1С по http запросу приходят эти данные. В ответ на запрос отправляем идентификатор либо найденного, либо созданного клиента. Идентификатор отправляем, чтобы после происходил обмен данными между приложением и 1С.
При тестировании было замечено, что соединение периодически прерывается, и не успевает отправиться ответ на запрос, так как время ожидания ответа выходит. Прерывание происходит только тогда, когда создается новый клиент. Долгое время занимает поиск клиента по номеру телефона (так как в базе более 100 тысяч клиентов) и создание клиента, если это требуется.
Для ускорения отправки ответа на запрос после того, как понимаем, что с таким номером телефона клиента нет, то генерируем идентификатор и отправляем. Процедуру создания клиента запускаем с помощью фонового выполнения.
УникальныйИдентификатор = Новый УникальныйИдентификатор(); ДанныеДляСоздания = Новый Массив(); ДанныеДляСоздания.Добавить(Имя); ДанныеДляСоздания.Добавить(Фамилия); ДанныеДляСоздания.Добавить(Отчество); ДанныеДляСоздания.Добавить(Телефон); ДанныеДляСоздания.Добавить(УникальныйИдентификатор); МетодСоздатьКлиента = "гк_HTTPСервис.СоздатьКлиента"; ФоновыеЗадания.Выполнить(МетодСоздатьКлиента, ДанныеДляСоздания); Возврат Строка(УникальныйИдентификатор);
В процедуре создания клиента новому элементу присваиваем ранее сгенерированный идентификатор.
Функция СоздатьКлиента(Имя, Фамилия, Отчество, Телефон, Идентификато) НоваяСсылка = Справочники.Партнеры.ПолучитьСсылку(Идентификато); НовыйЭлемент = Справочники.Партнеры.СоздатьЭлемент(); НовыйЭлемент.УстановитьСсылкуНового(НоваяСсылка)
Из-за того, что теперь не дожидаемся создания клиента, а отправляем идентификатор сразу, выполнение запроса ускорилось на 6 секунд, и тем самым перестал прерываться http запрос.
Второй пример
В мобильном приложение клиент заполняет анкету. Когда клиент отправляет заполненную анкету, в 1С приходят идентификаторы вопросов и ответов. В ответ на полученный запрос отправляем код выполнения 200, что означает, что данные получены.
В начале анкету создавали сразу и после отправляли ответ. При тестировании было замечено, что после отправки приложение зависает в среднем на 12 секунд, до получения ответа.
Для ускорения скорости выполнения запроса, сразу после получения ответов анкеты отправляем ответ. Процедуру создание анкеты запускаем с помощью фонового выполнения.
ДанныеДляСоздания = Новый Массив(); ДанныеДляСоздания.Добавить(ПолученныеДанные); МетодСоздатьАнкету = “гк_HTTPСервисДомилендВитрина.СоздатьАнкету”; ФоновыеЗадания.Выполнить(МетодСоздатьАнкету, ДанныеДляСоздания);
После оптимизации алгоритма обработки полученных идентификаторов вопросов и ответов, средние время ожидание составило 4 секунды, тем самым ускорили выполнение на 8 секунд.
Подводя итог, первый подход можно использовать, когда нужно отправлять идентификаторы для дальнейших интеграций, второй подход - когда отправляется ответ 200, а от ожидания ответа тормозится работа пользователя.