Книга: Настольная книга 1С:Эксперта по технологическим вопросам
Назад: Глава 5.Методики и дополнительная информация
Дальше: 5.3.Уточнения, важные для общего понимания картины

5.2.Требования с диска ИТС, применяемые при проверке на 1С:Совместимо!, влияющие на производительность

Для получения статуса 1С:Совместимо! конфигурация проходит проверку на соответствие кода формальным требованиям. Полный список требований приведен на ИТС. Те из них, что влияют на производительность, приведены в таблице 5.2.1.

Таблица 5.2.1. Требования, влияющие на производительность

Требование Описание
Проверка на пустой результат выполнения запросов Проверку того, что результат выполнения запроса не содержит строк, следует выполнять с помощью метода Пустой(), поскольку на получение выборки из результата запроса (выгрузка его в таблицу значений) будет затрачиваться дополнительное время
Использование ключевых слов в запросах «Объединить» и «Объединить все» в запросах В общем случае при объединении в запросе результатов нескольких запросов следует использовать конструкцию «ОБЪЕДИНИТЬ ВСЕ», а не «ОБЪЕДИНИТЬ», поскольку во втором варианте при объединении запросов полностью одинаковые строки заменяются одной, на что затрачивается дополнительное время, даже в случаях, когда одинаковых строк в запросах заведомо быть не может. Исключением являются ситуации, когда выполнение замены нескольких одинаковых строк одной является необходимым условием выполнения запроса
Программное управление формой ...В разделе инициализации модуля формы запрещается открывать другие формы или диалоги (например, операторами Вопрос(), Предупреждение() и т. д.).
Обращение к данным информационной базы в обработчиках часто вызываемых событий Следует минимизировать обращение к данным информационной базы в обработчиках событий, приведенных ниже, поскольку это может существенно замедлить интерактивную работу.
События формы:
ОбновлениеОтображения().
 События табличного поля:
 ПриВыводеСтроки(), ПриАктивацииСтроки().
 В качестве средств минимизации в зависимости от ситуации могут быть:
использование переменных модуля формы для кеширования данных,
перенос обработки данных в обработчики других событий,
для таблиц значений получение необходимых данных на этапе заполнения,
любые другие методы
Получение метаданных объектов Получение метаданных объекта конфигурации следует выполнять с помощью метода Метаданные() этого объекта, а не путем обращения к свойству глобального контекста «Метаданные», так как второй способ существенно более медленный.
Правильно:
 СправочникОбъект.Метаданные()
Неправильно:
Метаданные.Справочники[ИмяСправочника]
Использование объекта «РегистрСведений МенеджерЗаписи» Чтение записи (набора записей) из регистра сведений без последующей модификации необходимо выполнять запросом. Во всех остальных случаях объект «РегистрСведенийМенеджерЗаписи» следует применять только тогда, когда выполнение операций с регистром сведений требует использования отбора одновременно по всем измерениям. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи. В остальных случаях следует использовать объект «РегистрСведенийНаборЗаписей». С точки зрения производительности использование менеджера записей в некоторых случаях будет столь же эффективным, как и использование набора записей, а в некоторых – менее, так как будут выполняться лишние действия.
Правильно:
Набор =РегистрыСведений.ЗначенияПравПользователя.СоздатьНаборЗаписей(); Набор.Отбор.НаборПрав.Установить(ЗначениеНабораПрав);
 Для Каждого СтрокаТаблицы ИЗ ТаблицаЗначенийПрав Цикл
Запись = Набор.Добавить();
Запись.НаборПрав = ЗначениеНабораПрав;
Запись.Право = СтрокаТаблицы.Право;
 Запись.Значение = СтрокаТаблицы.Значение;
 КонецЦикла;
 Набор.Записать();
 Неправильно:
Для Каждого СтрокаТаблицы ИЗ ТаблицаЗначенийПрав Цикл
ЭлементРегистраСведений = РегистрыСведений.ЗначенияПравПользователя.СоздатьМенеджерЗаписи();
ЭлементРегистраСведений.НаборПрав = ЗначениеНабораПрав;
ЭлементРегистраСведений.Право = СтрокаТаблицы.Право;
ЭлементРегистраСведений.Значение = СтрокаТаблицы.Значение;
ЭлементРегистраСведений.Записать();
КонецЦикла;
Копирование строк между таблицами значений произвольной структуры При копировании строк между различными таблицами значений (табличными частями и т. п.) со схожим составом колонок следует использовать метод глобального контекста ЗаполнитьЗначенияСвойств(). Алгоритмы, использующие данный метод, значительно эффективнее, например, многократного перебора колонок таблицы значений, выполняемого для получения их состава.
 Правильно:
Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);
 КонецЦикла;
 Неправильно:
Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();
 Для каждого Колонка Из ТаблицаПриемник.Колонки Цикл
КолонкаТаблицыИсточника = ТаблицаИсточник.Колонки.Найти(Колонка.Имя);
Если КолонкаТаблицыИсточника <> Неопределено Тогда
СтрокаТаблицыПриемника[Колонка.Имя] = СтрокаТаблицыИсточника[Колонка.Имя];
КонецЕсли;
КонецЦикла;
КонецЦикла;
Получение представлений для ссылочных значений в табличном документе При формировании табличного документа запрещено в качестве параметров ячеек с типом заполнения «Параметр» указывать ссылочные значения, поскольку в этом случае в момент вывода данных в табличный документ будет выполнено многократное обращение к базе данных для получения представлений этих значений.
Поэтому в качестве параметров следует указывать сами представления.
Исключением могут быть случаи, когда для получения представлений придется выполнять аналогичное многократное обращение к базе данных.
При этом следует иметь в виду, что при получении представлений для полей непосредственно в самом запросе (через поле «Представление» или функцией Представление(<Имя поля>)) выполняется неявное соединение с таблицей объекта, для которого получаются представления. Для полей составного типа – несколько соединений, для каждого из типов, входящих в состав. Это может приводить к увеличению времени выполнения запроса (и как следствие общего времени формирования итогового документа), а при большом количестве типов – к невозможности его выполнения в клиент-серверной версии из-за ограничения Microsoft SQL Server, по которому в запросе не может участвовать больше 256 таблиц. Такие случаи также могут быть исключением для данного правила. В них представления для ссылочных значений допускается получать в момент их вывода в табличный документ.
Поскольку однозначно рекомендовать, какой из способов получения представлений следует выбрать, нельзя, такой выбор должен делаться разработчиком самостоятельно, на основании данных, полученных экспериментально
Назад: Глава 5.Методики и дополнительная информация
Дальше: 5.3.Уточнения, важные для общего понимания картины