Несколько серверных вызовов внутри клиентского метода
Разработку управляемого приложения необходимо вести с контролем количества вызовов серверных процедур и функций из клиентского кода (серверных вызовов).
Общее количество серверных вызовов складывается из - обращений на сервер, которые выполняет платформа 1С:Предприятие, - и вызовов, которые выполняются из клиентского кода конфигурации.
В общем виде, при проектировании клиент-серверного взаимодействия в конфигурации следует руководствоваться тем, что на каждое действие пользователя в клиентском коде конфигурации не должно выполняться дополнительных вызовов на сервер. Любые исключения из этого правила требуют дополнительного обоснования.
Важно учитывать, что на некоторых видах соединения количество вызовов очень сильно влияет на производительность системы, так как каждый вызов, независимо от объема передаваемых данных, может занимать до 1.5 секунд.
При оптимизации следует ориентироваться на минимизацию количества вызовов и на снижение объема передаваемых данных.
Для этого используются различные методики: - объединение нескольких вызовов в один вызов, - исключение лишних вызовов, - применение функций повторно используемых возвращаемое значение - и т.д.
Пример подозрительного кода
&НаКлиенте
Процедура ОбработчикДействия(Команда)
ОбщийСерверныйМодуль.СервернаяПроцедура();
Результат = СервернаяФункцияФормы();
КонецПроцедуры
&НаСервере
Процедура СервернаяФункцияФормы()
// код функции
Возврат Результат;
КонецПроцедуры
Подобные вызовы серверных функций лучше объединить в один серверный вызов.
&НаКлиенте
Процедура ОбработчикДействия(Команда)
Результат = ЕдиныйСерверныйВызов();
КонецПроцедуры
&НаСервере
Процедура ЕдиныйСерверныйВызов()
ОбщийСерверныйМодуль.СервернаяПроцедура();
Результат = СервернаяФункцияФормы();
Возврат Результат;
КонецФункции
&НаСервере
Функция СервернаяФункцияФормы()
// код функции
Возврат Результат;
КонецФункции
Способы оптимизации зависят от конкретных инструментов/механизмов.
Рекомендуется исходить из подхода: "Можно ли обойтись в этом действии без данного вызова и можно ли обойтись без передачи данного объема информации?".
Очевидно, что структура кода конфигурации должна быть обусловлена не прикладными соображениями, а соображениями клиент-серверного взаимодействия.
Например, с точки зрения разделения функциональности на части можно было бы при запуске конфигурации выполнять вызовы сервера для получения некоторых начальных данных, требуемых клиенту, отдельно по каждой подсистеме. Но, исходя из особенности клиент-серверной разработки, необходимо реализовать получение необходимой информации в одном вызове.
См. также
- Минимизация количества серверных вызовов - стандарты ИТС
- Методика оптимизации клиент-серверного взаимодействия прикладных решений - стандарты ИТС
Экранирование кода
// sonar:SomeServerCallsFromClient:off
// sonar:SomeServerCallsFromClient:on