Технология расширений — это мощный и удобный инструмент, который позволяет кастомизировать типовые решения 1С без изменения основной конфигурации. Однако многие разработчики, особенно на версиях платформы 8.3.11–8.3.14, сталкиваются с серьезным падением скорости работы: база запускается в несколько раз дольше, формы «тормозят», а запросы выполняются медленнее. Разберем подробно, почему это происходит и как вернуть системе былую скорость.
Проанализируем ситуацию: когда мы подключаем расширение, платформа 1С перестает работать с монолитной конфигурацией. Вместо этого при каждом запуске сеанса происходит процесс динамической сборки. Система должна «на лету» объединить метаданные основной конфигурации и расширения, а также скомпилировать результирующий программный код.
Рассмотрим основные причины задержек на этом этапе:
Глобальный, система обязана инициализировать их при каждом входе пользователя. Это создает колоссальную нагрузку на клиент и сервер.Рекомендация: Если есть возможность, обновите платформу до версии 8.3.15 или выше. Начиная с этих релизов, 1С внедрила механизмы частичной компиляции и значительно улучшила работу серверного кэша для расширений.
Выясним причину, связанную с безопасностью. По умолчанию при подключении расширения в профиле безопасности или в свойствах расширения часто стоит галочка Безопасный режим. Это не просто формальность — это серьезный ограничитель производительности.
Когда БезопасныйРежим включен, платформа выполняет следующие действия:
Практика показывает, что отключение безопасного режима для доверенных расширений может ускорить работу интерфейса в 1.5–2 раза. Делайте это только в том случае, если вы уверены в коде расширения и оно работает в закрытом контуре предприятия.
Посмотрим на пример типичной ошибки: разработчик хочет добавить один реквизит в документ РеализацияТоваровУслуг. Для этого он заимствует документ целиком со всеми его многочисленными реквизитами, формами и макетами. Это в корне неверный подход.
Чем больше метаданных «затянуто» в расширение, тем тяжелее платформе отслеживать связи между ними. Разберем по шагам правильный алгоритм:
Проанализируем ситуацию с запросами. Почему консоль запросов начинает работать медленнее? Дело в том, что если расширение добавляет новые реквизиты в существующие таблицы, СУБД (будь то MSSQL или PostgreSQL) вынуждена выполнять операцию JOIN (соединение) основной таблицы с таблицей расширения при каждом обращении. На платформе 8.3.11 планы запросов могли строиться неоптимально, что приводило к деградации производительности всей базы.
Рассмотрим, как использование различных аннотаций влияет на скорость вызова процедур и функций. В расширениях мы используем три основных типа перехвата:
&Перед — выполняется перед основным кодом.&После — выполняется после основного кода.&Вместо — полностью замещает типовой алгоритм.Самым «тяжелым» является &Вместо, так как он требует от платформы полной подмены контекста. Если у вас выстроена длинная цепочка из нескольких расширений, каждое из которых использует &Вместо, время выполнения метода растет в геометрической прогрессии.
Посмотрим на пример оптимизированного вызова:
&После("ПриСозданииНаСервере")
Процедура Мой_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавляем только необходимую логику, не переписывая типовую
Если ДополнительныеПараметры.Свойство("СпецРежим") Тогда
Элементы.ГруппаСпецНастройки.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Старайтесь использовать &Перед и &После. Это позволяет платформе более эффективно строить дерево вызовов.
Проанализируем еще одну идею из обсуждения: «Все в одном расширении или бить на несколько?». Хотя кажется, что одно расширение собирается быстрее, на практике платформа эффективнее работает с несколькими небольшими и узкоспециализированными расширениями.
Разберем, почему это выгодно:
Подводя итог, если вы столкнулись с медленной работой 1С из-за расширений, пройдите по следующим пунктам:
БезопасныйРежим в свойствах расширения, если это допустимо политикой безопасности.Глобальный там, где он не требуется.Соблюдение этих правил позволит вам сохранить все преимущества расширений (удобство поддержки и чистоту типовой конфигурации) без ущерба для комфортной работы пользователей.