При разработке мобильных приложений на платформе 1С часто возникает задача передачи мультимедийных данных, например, фотографий, на сервер. Нередко разработчики сталкиваются с тем, что процесс передачи занимает значительное время (до минуты и более), что негативно сказывается на пользовательском опыте. Давайте разберем, почему это происходит и как оптимизировать данный процесс.
Основная причина медленной работы заключается в объеме передаваемых данных. Мобильные устройства современных пользователей оснащены камерами с очень высоким разрешением, в результате чего один снимок может достигать нескольких мегабайт в «сыром» виде. При попытке преобразовать эти данные в Base64Строка или сериализовать их в XML для передачи через стандартные механизмы обмена, объем данных возрастает, а нагрузка на процессор мобильного устройства при сериализации и шифровании (особенно в VPN-каналах) становится критической.
Самое эффективное решение, подтвержденное практикой, — ограничить качество и разрешение изображения непосредственно в момент создания снимка. Нет смысла передавать фото в разрешении 4К, если оно будет отображаться в небольшом окне учетной системы. Используйте объект РазрешениеКамерыУстройства для настройки параметров.
Рассмотрим, как правильно настроить вызов метода СделатьФотоснимок:
Разрешение = Новый РазрешениеКамерыУстройства;
Разрешение.Высота = 800;
Разрешение.Ширина = 1280;
// 90 — это коэффициент качества сжатия JPEG (от 1 до 100)
ДанныеМультимедиа = СредстваМультимедиа.СделатьФотоснимок(ТипКамерыУстройства.Задняя, Разрешение, 90);
Установив разумные параметры ширины и высоты, а также подобрав оптимальное качество сжатия, вы сможете уменьшить размер передаваемого файла в разы, что позволит сократить время загрузки до нескольких секунд.
Если после оптимизации размера снимка скорость все еще недостаточно высока, проанализируйте способ передачи. Вместо сериализации данных в длинные строки внутри структур (что является затратной операцией), рассмотрите следующие подходы:
ХранилищеЗначения с использованием алгоритма СжатиеДанных.HTTP-сервисам. Они позволяют работать с двоичными данными как с потоком, что значительно быстрее и экономнее по ресурсам памяти, чем обработка XML-конвертов.Пример использования сжатия данных перед отправкой:
// Сжатие данных на стороне клиента перед отправкой
ДанныеДляОтправки = Новый ХранилищеЗначения(ДанныеКартинки, Новый СжатиеДанных(9));
Сервис.SavePics(ДанныеДляОтправки);
Если оптимизация данных не дает нужного результата, проведите диагностику инфраструктуры:
VPN. Часто именно шифрование трафика становится «бутылочным горлышком».ТекущаяУниверсальнаяДатаВМиллисекундах. Замерьте время до начала обработки данных и после завершения записи, чтобы понять, где именно происходит задержка: на этапе передачи (сети) или на этапе записи в базу данных.Для создания стабильно работающего механизма передачи фото в мобильной 1С придерживайтесь следующих правил:
СжатиеДанных для двоичных объектов.Base64, если есть возможность передать их как чистый поток данных.Реализовав эти шаги, вы значительно ускорите работу своего мобильного приложения и сделаете процесс загрузки фотографий комфортным для конечного пользователя.