При работе с УАТ 1.0, особенно при большом объёме данных, можно столкнуться с тормозами при работе интерфейса и проведении некоторых расчётов.
Для примера возьмём форму списка справочника Транспортные средства и посмотрим на замеры производительности.
Как видим, 182 раза выполнялся запрос, что заняло 51% времени, и это только при открытии формы списка справочника Транспортные средства, тут явно что-то не то.
Запрос находится в функции уатПраваИНастройки.уатПолучитьПраваИНастройкиПользователя, запрос содержит соединение РегистрСведений.уатПраваИНастройки с ПланВидовХарактеристик.уатПраваИНастройки четыре раза.
Вопрос зачем городить такой запрос и зачем он выполняется 182 раза только при открытии формы списка справочника Транспортные средства, мы оставим разработчикам. Кстати вызов данной функции встречается 420 раз в конфигурации
Нам надо как-то решить вопрос с производительностью. Будем кешировать права и настройки, для этого будем использовать глобальную переменную глКЭШПраваИНастройкиУАТ в Модуль обычного и управляемого приложения.
В функцию уатПолучитьПраваИНастройкиПользователя ещё один параметр ИспользоватьКЭШ = Истина
И добавляем алгоритм кеширования, перед запросом.
Для корректной работы нужно так-же внести изменения в Модуль объекта обработки уатУстановкаПравИНастроек, а именно найти все вызовы уатПолучитьПраваИНастройкиПользователя и последним параметром поставить Ложь, чтобы не использовать кеширование при её работе.
После изменений при открытии формы списка справочника Транспортные средства данный запрос выполняется всего 3 раза, для заполнения кэша.
Все остальные вызовы получают данные из кэша и не дёргают базу запросами.
Замеры и скриншиты сделаны в файловой Демо базе, но ранее аналогичные изменения позволили значительно улучшить производительность в работе модуля УАТ 1.0 интегрированного в УПП с тысячей элементов в справочнике Транспортные средства.
Тестировалось на конфигурациях:
— УАТ Проф, редакция 1.0 (1.0.14.1), платформа (8.3.12.1790)
Во вложении CF с изменениями для объединения с УАТ Проф, редакция 1.0 (1.0.14.1), если Вам лень набивать код с картинок 🙂
УАТ Проф редакция 1.0 не самая свежая конфа, но её до сих пор активно используют поэтому считаю что будет полезно.
Если кешировать пообъектно можно просто поставить «Повторное использование возвращаемых значений» «На время сеанса»
(2)
В УАТ 2 работа этой функции именно так и реализована, функция вынесена в отдельный модуль уатПраваИНастройкиПовтИсп
На момент первоначальной реализации я увидел проблему и посчитал что сделать свой кэш проще.
Позор разработчикам, элементарную оптимизацию не сделали.