Как ускорить загрузку и отображение картинок в 1С?

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

При разработке функционала для работы со сканами документов, сертификатами качества или фото номенклатуры разработчики часто сталкиваются с проблемой: при выборе элемента списка предпросмотр изображения на форме задерживается на несколько секунд. Рассмотрим причину возникновения таких задержек и разберем практические способы оптимизации работы с изображениями в платформах 1С.

Выясним причину медленной работы

Проанализируем типовой код, который используется для вывода картинки на форму из локального файла или сетевого ресурса:


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

Замер производительности показывает, что основной объем времени уходит на исполнение конструктора Новый Картинка(Путь). Это происходит по следующим причинам:

  1. Задержки сетевого доступа: Если файл расположен в сетевой папке (по протоколам SMB/CIFS), платформа выполняет ряд служебных операций OS: проверку прав, блокировок, открытие сетевого потока. Это создает заметный отклик в 1–2 секунды.
  2. Распаковка растрового массива: При инициализации объекта Картинка из сжатого файла (например, JPEG или PNG высокого разрешения с 300–600 DPI) платформа производит полное декодирование изображения в несжатый массив в оперативной памяти.
  3. Проверки антивирусного ПО: При постоянном обращении к дискам файловый монитор антивируса перехватывает операцию чтения для сканирования файла.

Способ 1. Использование миниатюр и оптимизация формата изображений

Главная ошибка при работе со сканами — попытка отобразить полноразмерный документ высокого разрешения в небольшом окне предпросмотра. Разберем, как исправить эту ситуацию.

Для экранного предпросмотра на форме достаточно создать уменьшенную копию (миниатюру) размером порядка 150×200 пикселей или с разрешением 100–150 DPI. Для этого можно задействовать объект ОбработкаКартинок или подготовить уменьшенные файлы на этапе их первоначального сохранения.

Преимущества подхода:

  1. Объем файла миниатюры составляет единицы килобайт, поэтому конструктор Новый Картинка отрабатывает мгновенно.
  2. При клике на миниатюру пользователь по необходимости может открыть полноразмерный документ в отдельном окне.

Способ 2. Использование подсистемы «Работа с файлами» из БСП

В Библиотеке Стандартных Подсистем (БСП) реализована универсальная архитектура для работы с присоединенными файлами. Она решает большинство проблем с производительностью и хранением.

Рассмотрим особенности работы с файлами в БСП:

  1. Разделение данных и метаданных: Информация о файле (наименование, размер, автор, дата) хранится в справочнике вида НоменклатураПрисоединенныеФайлы, а двоичные данные — в отдельном регистре сведений ДвоичныеДанныеФайлов или в специализированной папке на диске.
  2. Выбор места хранения: Разработчик и администратор могут самостоятельно выбирать, где хранить двоичные данные — в базе данных (в объектах типа ХранилищеЗначения) или в томах на диске.
  3. Автоматическое кэширование: При работе с томами на диске БСП использует локальный каталог временных файлов текущего пользователя (получаемый через КаталогВременныхФайлов()), что минимизирует повторные сетевые обращения.

Способ 3. Фоновая подгрузка и кэширование картинок

Если структура приложения не позволяет использовать БСП, проанализируем варианты решения на уровне логики формы.

Кэширование в памяти:

При открытии формы или активизации списка можно заранее считывать и создавать объекты Картинка для видимых строк и записывать их в массив или соответствие. При переходе по строкам форма будет мгновенно брасывать уже созданный объект из памяти без повторного обращения к диску.

Асинхронная или фоновая загрузка:

В управляемых формах вместо прямого чтения файла на клиенте принято переносить загрузку на сервер: файлы помещаются во временное хранилище через метод ПоместитьВоВременноеХранилище(), а поле формы связывается с полученным навигационным адресом (вида e1cib/tempstorage/...).

Сравнение вариантов хранения: Диск или База данных?

Выясним плюсы и минусы обоих подходов, чтобы выбрать оптимальный для конкретного проекта.

Хранение на диске / в сетевой папке:

  1. Плюсы: Информационная база не увеличивается в размерах, выгрузка резервных копий (dt-файлов) происходит быстро.
  2. Минусы: Задержки при сетевом доступе, необходимость отдельной настройки резервного копирования папок, риски блокировки файлов сторонними приложениями.

Хранение в базе данных (в ХранилищеЗначения):

  1. Плюсы: Выборка двоичных данных через SQL-запросы происходит быстрее, чем чтение с сетевого диска. Картинки попадают в общий резервный архив базы.
  2. Минусы: Существенный рост размера базы данных. Чтобы избежать замедления работы основных справочников и документов, данные файлов необходимо выносить в отдельные регистры сведений или подчиненные справочники.

Таким образом, для достижения максимальной скорости работы интерфейса рекомендуется сочетать создание миниатюр для быстрого предпросмотра и использование подсистемы работы с файлами БСП.

← На главную