Функции "слоупока" 2: Новая битва

10.03.25

Разработка - Инструментарий разработчика

В данной публикации рассматривается очередной архитектурный косяк, который я обнаружил в "Функциях технического специалиста", который тормозит их открытие.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Расширение с обработкой "Все функции" без косяков
.cfe 19,53Kb ver:1.0
7
7 Скачать бесплатно

Приветствую, коллеги!

Прошло ровно 3 года с момента выхода моей статьи Функции "слоупока": как заставить открываться "Все функции" в 97 раз быстрее! 

Предлагаю в честь третьей годовщины дружно пнуть розового покемона под зад ещё разок)

Если кто-то пропустил, то напомню в двух словах суть оригинальной статьи: на крупных конфигурациях Функции для технического специалиста открывались по 2-3 минуты. Мой анализ показал, что вся проблема была в циклическом доставании пиктограмм объектов метаданных из библиотеки картинок.

Вскрылась проблема, что платформа не кэширует картинки после первого обращения к ним, и 97% времени построения дерева метаданных конфигурации система тратила в "никуда".
Статья тогда вызвала широчайший общественный резонанс (набрав аж 245 плюсиков на инфостарте!) и вместе мы смогли переломить ситуацию: 1С пофиксила баг платформы, и начиная с версии 8.3.22 "Все функции" начали открываться практически мгновенно!

Занавес! Танцующие слоны! Индийская музыка!

 

 

Как бы не так! Увы, но приходится возвращаться к этому вопросу повторно. К сожалению, в данную обработку заложена ещё одна архитектурная бомба, не исправив которую, мы скоро вернёмся к тому же, от чего ушли...

Причины её появления очевидны и они ничем не отличаются от предыдущего косяка с картинками.
Пока конфигурации были маленькие, дерево метаданных строилось быстро и никому в голову не приходило что-то оптимизировать. Конфигурации выросли, и вылезла большая проблема.

Что произошло теперь: жил был такой раздел во всех функциях, под названием "Стандартные". В нём хранились встроенные в конфигурацию обработки. И было этих обработок очень мало. И заложили под построение этих пунктов меню кривую архитектуру. Но их было мало, поэтому проблема не ощущалась.
Но время шло, а количество стандартных обработок росло как снежный ком.
Для примера, в платформе 8.3.18 у нас было 16 стандартных обработок, а в версии 8.3.24 их уже стало 28! И очевидно, что их количество будет и дальше расти.

 

 

И вот что мы имеем на текущий день:

Это скрин замера производительности построения дерева конфигурации в Функциях технического специалиста в платформе 8.3.24.1764:

 

 

Если мы просуммируем % времени, которое занимают выделенные строки, то выходим на цифру 89,96%. Именно столько времени при открытии Всех функций тратится на отрисовку обработок из раздела "Стандартные"!

Сейчас на относительно мощном серваке это занимает порядка 12 секунд. Это конечно не 2-3 минуты, как раньше, но тем не менее определённый дискомфорт доставляет.
А учитывая, что количество этих стандартных обработок растёт как грибы после дождя, не исправив этот архитектурный косяк сейчас, мы рискуем через пару лет откатиться к прошлым 2 минутам.

Однако, давайте уже детально рассмотрим проблему и пути её очевидного решения.

Предлагаю рассмотреть её на примере одной обработки из пункта меню "Стандартные", ввиду того, что все остальные 27 пунктов имеют аналогичную архитектуру.

  If AccessRight("Administration", Metadata) Then
        ServersControl = Undefined;
        Try
            ServersControl = New("ExternalDataProcessorObject.StandardServersManagement");
        Except
            Try
                ExternalDataProcessors.Connect("v8res://mngbase/StandardServersManagement.epf", "StandardServersManagement", false, , LanguageCode);
                ServersControl = New("ExternalDataProcessorObject.StandardServersManagement");
            Except
                Message(ErrorDescription());
            EndTry;
        EndTry;
        If ServersControl <> Undefined Then
            SubString = Table.Rows.Add();    
            SubString.Name = NStr("en = 'Server management'; SYS = 'AllFunctions.ServersControl'", "en");
            SubString.Form = "ExternalDataProcessor.StandardServersManagement.Form";
            SubString.Picture = PictureLib.Form;
            SubString.Type = "ExternalForm";
        EndIf;
    EndIf;

Код на английском, поэтому я немного поясню. Здесь мы пытаемся создать новый объект внешней обработки с именем StandardServersManagement. Если мы падаем в исключение, значит такая внешняя обработка ещё не подключена.
Поэтому попав в исключение, мы данную внешнюю обработку подключаем из системного ресурсного файла, находящегося по адресу "v8res://mngbase/StandardServersManagement.epf".
Если всё прошло гладко, то мы выводим соответствующий пункт меню в дерево метаданных в раздел "Стандартные".

Беда здесь заключается в том, что подключение внешней обработки из ресурсного файла - это дело не быстрое. И при открытии Всех функций мы подключаем сразу все 28 внешних обработок, тратя на это почти 90% времени.

С какой долей вероятности мы воспользуемся хотя бы 3-4 стандартными обработками за сеанс? Конечно, куда логичнее выполнять подключение конкретной, нужной нам стандартной обработки в момент её запуска. Нет никакого смысла подключать каждый раз все 28 обработок в момент открытия, подвешивая систему на 12 секунд!

Имеет смысл конечно обсудить и платформенный вопрос кэширования данных обработок. Условно говоря, если бы эти 28 обработок были встроены в конфигурацию, их бы не пришлось при каждом запуске сеанса доставать и подключать из ресурсных файлов. Что мешает разработчикам платформы проработать аналогичный способ хранения данных обработок, просто скрыв их отображение в дереве конфигурации? Согласитесь, это чертовски странно - использовать функционал ВНЕШНИХ обработок для реализации ВНУТРЕННЕГО встроенного по умолчанию в платформу функционала.

Друзья, давайте уже добьём эту проблему до конца! Оптимизировав лишь этот момент, Все функции будут открываться меньше, чем за секунду! Поэтому я вновь призываю всех, у кого есть такая возможность - донести данную информацию до разработчиков платформы.

И быть может, через пару лет, в одном из будущих релизов платформы 8.5 или 8.6 мы облегчённо вздохнём...)

Ну а я традиционно выкладываю расширение, которое открывает оптимизированные "Все функции" мгновенно, по нажатию горячих клавиш Ctrl + Shift + Q.
При самом первом запуске алгоритм проверит, какие из стандартных обработок доступны в вашей версии платформы и сохранит эту информацию в хранилище общих настроек, чтобы в дальнейшем отрисовывать в дереве только те пункты стандартных обработок, которые существуют.
Поэтому самый первый запуск будет такой же долгий, как и стандартные "Все функции". При последующих открытиях проблем не возникнет. Стандартные обработки, разумеется, будут подключаться из ресурсных файлов только в момент их открытия.

Удачи, друзья! И как всегда, призываю экономить своё время!))

все функции функции технического специалиста оптимизация обработка

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    178415    987    403    

947

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    19856    131    70    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    18917    51    19    

83

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    12925    53    33    

72

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    29097    100    48    

146

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18676    7    32    

43

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1783    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7269 11.03.25 09:12 Сейчас в теме
На v8@1c.ru написал?
VyacheslavShilov; iov; BigB; +3 Ответить
2. XilDen 605 11.03.25 10:47 Сейчас в теме
(1) Не, я никуда не писал) Надеюсь тут люди знающие, напишут, куда надо)
3. iov 407 11.03.25 13:21 Сейчас в теме
(2) сарказм дело тонкое. Настолько тонкое что не все видят.
4. iov 407 11.03.25 13:24 Сейчас в теме
(1) мое почтение и благодарность за инструменты. Ждем еще ))
5. gruk 19 11.03.25 14:38 Сейчас в теме
Плюсанул, пусть дойдёт куда надо )))
Решил проверить почему меня это не напрягает:
Windows, 8.3.25.1394, УТ11.5, 28 обработок встроенных, сервак конечно мощьный, но не то чтоб супер, на 200 юзеров, покупался 7 лет назад. Открывается за 3 секунды первый раз, потом мгновенно.
Дома на файловой Linux, 8.3.25.1501, УТ11.5, Открывается за 3 секунды первый раз, потом мгновенно.

Думаю вот как можно использовать все функции: по времени открытия на глазок оценить производительность железа и сделать вывод о его замене ))))
Оставьте свое сообщение