Медленное открытие формы: причины и способы решения
Один из любимых вопросов на сертификационном экзамене 1С:Эксперт:
Как вы будете устранять проблему медленного открытия формы? С чего начнёте? Какие шаги предпримете?
На практике причин может быть несколько, и пути решения — разные. Разберёмся по порядку:
Если у пользователей с ограниченными правами форма открывается медленно, а у администратора — быстро, велика вероятность, что дело в RLS (role level security). В этом случае пути решения лежат в области оптимизации RLS. Это может быть как отказ от RLS через разделение системы, например вести учет по каждой организации в отдельной базе. Также выходном может быть использование производительного РЛС.
Вне рабочего времени всё работает быстро — значит, стоит обратить внимание на ресурсы оборудования:
- Перегруженность дисков
- Нехватка оперативной памяти на сервере СУБД
- Сетевые задержки
Также нельзя исключать возможные проблемы с клиентским компьютером. Для диагностики в таких случаях обязательно собираем тех. журнал на клиенте.
Если вышеуказанные причины исключены, пора включать отладчик и исследовать код. Важно выяснить, на каком этапе уходит основное время. Применяем принцип Парето: ищем те 20% операций, которые дают 80% задержек. Оптимизация именно этих участков кода даст наибольший эффект.
Иногда отладчик показывает, что основная задержка — это обмен между клиентом и сервером. В таких случаях:
- Собираем технический журнал (ТЖ)
- Анализируем временной промежуток между событиями VRSREQUEST и VRSRESPONSE
При этом должно соблюдаться следующее неравенство:
Время замера кода < Время по тех. журналу < Время по секундомеру или по APDEX
Частой проблемой является перегрузка формы большим количеством элементов и реквизитов. Чрезмерное усложнение формы не совсем правильный подход в разработке (но мы то живем в реальной жизни) и такое может произойти сплошь и рядом.
Программисты часто помещают очень много данных в реквизиты формы с целью «оптимизации» создавая тем самым «кэш» к которому можно обращаться и с клиента и с севера. При этом не осознавая, что один серверный вызов при необходимости может быть намного быстрее чем хранение большой таблицы в реквизитах формы.
Если избежать загрузки таблицы нельзя, но её формирование на сервере занимает много времени — есть способ ускорить эту операцию используя помещение таблицы во временное хранилище.
- В процедуре ПриСозданииНаСервере формируем таблицу.
- Посещаем её во временное хранилище.
- В реквизите формы сохраняем адрес временного хранилища.
- При необходимости работы с таблицей в момент серверного вызова — извлекаем таблицу из временного хранилища по адресу и работаем с ней.
Этот подход может значительно сократить время открытия формы, особенно в ситуациях когда используются большие таблицы.
На ИТС есть отличная статья, подробно описывающая методику расследования медленного открытия форм. Очень рекомендую к прочтению — системный подход помогает не тратить время на догадки, а сразу действовать эффективно.
>>Click here to continue<<
