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

06.06.25

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

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

Бесплатные

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

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

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

Прошло ровно 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С:ERP Управление предприятием 2, релизы 2.5.22.63

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

15500 руб.

02.09.2020    202116    1114    410    

1021

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

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

8400 руб.

20.08.2024    35487    206    104    

195

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    23919    63    26    

92

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

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

16000 руб.

10.11.2023    16413    69    39    

88

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

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

9360 руб.

17.05.2024    34604    122    53    

165

SALE! 30%

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

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1641    1    0    

8

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

6000 руб.

07.02.2018    107115    249    100    

313
Отзывы
13. Дмитрий74Чел 250 14.03.25 17:05 Сейчас в теме
(11) налетай не скупись наплюсовывай на форуме партнерском https://partners.v8.1c.ru/forum/topic/2230329
mrChOP93; XilDen; tormozit; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7294 11.03.25 09:12 Сейчас в теме
На v8@1c.ru написал?
VyacheslavShilov; iov; BigB; +3 Ответить
2. XilDen 688 11.03.25 10:47 Сейчас в теме
(1) Не, я никуда не писал) Надеюсь тут люди знающие, напишут, куда надо)
3. iov 408 11.03.25 13:21 Сейчас в теме
(2) сарказм дело тонкое. Настолько тонкое что не все видят.
4. iov 408 11.03.25 13:24 Сейчас в теме
(1) мое почтение и благодарность за инструменты. Ждем еще ))
10. Дмитрий74Чел 250 12.03.25 15:46 Сейчас в теме
(1) на partners еще бы продублировать
11. tormozit 7294 12.03.25 17:06 Сейчас в теме
12. Дмитрий74Чел 250 14.03.25 16:59 Сейчас в теме
14. tormozit 7294 14.03.25 17:19 Сейчас в теме
(12) Доволен тобой. Разрешений на ветер не бросаешь.
13. Дмитрий74Чел 250 14.03.25 17:05 Сейчас в теме
(11) налетай не скупись наплюсовывай на форуме партнерском https://partners.v8.1c.ru/forum/topic/2230329
mrChOP93; XilDen; tormozit; +3 Ответить
5. gruk 43 11.03.25 14:38 Сейчас в теме
Плюсанул, пусть дойдёт куда надо )))
Решил проверить почему меня это не напрягает:
Windows, 8.3.25.1394, УТ11.5, 28 обработок встроенных, сервак конечно мощьный, но не то чтоб супер, на 200 юзеров, покупался 7 лет назад. Открывается за 3 секунды первый раз, потом мгновенно.
Дома на файловой Linux, 8.3.25.1501, УТ11.5, Открывается за 3 секунды первый раз, потом мгновенно.

Думаю вот как можно использовать все функции: по времени открытия на глазок оценить производительность железа и сделать вывод о его замене ))))
6. SlavaKron 12.03.25 10:45 Сейчас в теме
При самом первом запуске алгоритм проверит, какие из стандартных обработок доступны в вашей версии платформы
Если появятся новые стандартные обработки, алгоритм их не добавит?
7. XilDen 688 12.03.25 11:23 Сейчас в теме
(6) Нет, обработка не умеет заглядывать в будущее) Код добавления каждой стандартной обработки и ресурсный файл, в котором она хранится - захардкожен. Тут только выпускать обновление)
8. SlavaKron 12.03.25 11:30 Сейчас в теме
(7) В теории можно пробежаться по ресурсному файлу и получить список актуальных обработок.
9. XilDen 688 12.03.25 11:40 Сейчас в теме
(8) в теории да) Если взять данную публикацию за основу https://infostart.ru/1c/tools/538300/
Оставьте свое сообщение