Оптимизация использования аппаратных ресурсов системой 1С (клиент - сервер) часть 1
Архитектура
Архитектура
Устройство кластера серверов
Устройство кластера серверов
Устройство кластера серверов
Устройство кластера серверов
Устройство кластера серверов
Устройство кластера серверов
Взаимодействие клиентского приложения с кластером серверов
Взаимодействие клиентского приложения с кластером серверов
Масштабируемость кластера серверов
Масштабируемость кластера серверов
Масштабируемость кластера серверов
Масштабируемость кластера серверов
Сеансы и соединения
Сеансы и соединения
Сеансы и соединения
Сеансы и соединения
Сеансы и соединения
Сеансы и соединения
Клиент-серверная архитектура
Клиент-серверная архитектура
Предметы оптимизации
Форма – клиент-серверный объект
Общий подход к программированию форм
Передача между клиентом и сервером
Использование оперативной памяти
Использование оперативной памяти
Использование оперативной памяти
Выбрать() / Выгрузить()
Временные таблицы и Вложенные запросы
Выгрузка результатов запроса
Рекомендации при разработке, чтобы код одинаково хорошо работал на разных СУБД
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Механизмы кэширования
Примеры оптимизации клиент-серверного взаимодействия
Объединение нескольких вызовов сервера в один
Объединение нескольких вызовов сервера в один
Объединение нескольких вызовов сервера в один
Объединение нескольких вызовов сервера в один
Использование внеконтекстных серверных процедур в модуле формы
Использование внеконтекстных серверных процедур в модуле формы
Использование внеконтекстных серверных процедур в модуле формы
Использование внеконтекстных серверных процедур в модуле формы
Использование клиентских процедур для небольших расчетов данных формы
Использование контекстных серверных процедур для пересчета данных коллекций форм
Управление открываемой формой путем передачи параметров
Реализация функциональности в клиентских и серверных обработчиках событий формы в зависимости от их назначения
Использование стандартных полей запроса в динамических списках на клиенте
Использование стандартного параметра формы отчета для автоматического формирования отчета при его открытии
Получение предопределенных значений на клиенте
Запись данных объекта в единой транзакции за один серверный вызов
Использование временного хранилища для передачи данных между формами
Изменение оформительских свойств элементов формы, не требующих обращения к серверу
Инструменты используемые для оптимизации
Инструменты, используемые при оптимизации клиент-серверного взаимодействия
Показатели производительности
Показатели производительности
Показатели производительности
Режим низкой скорости соединения
Режим низкой скорости соединения
Режим имитации задержек при вызове сервера
Режим имитации задержек при вызове сервера
Различия между режимами «Низкой скорости» и «Имитации задержек»
Замер производительности
Замер производительности
Замер производительности
Проверка серверных вызовов в обработчиках событий
The end
2.66M
Category: programmingprogramming

_ТребуетсяПереработать_Оптимизация_использования_аппаратных_ресурсов (3)

1. Оптимизация использования аппаратных ресурсов системой 1С (клиент - сервер) часть 1

2. Архитектура

Клиент-серверная архитектура подразумевает наличие
следующих программных уровней:
• Клиентское приложение (толстый клиент, тонкий
клиент, веб-клиент, мобильный клиент);
• Веб-сервер (для веб-клиента и для тонкого клиента,
подключенного через веб-сервер);
• Кластер серверов;
• Сервер базы данных;

3. Архитектура

Клиентские приложения, тонкие клиенты, веб-клиенты – это 1С:Предприятие с которым
работает конечный пользователь.
Кластер серверов – это промежуточный программный слой между клиентским приложением и
сервером базы данных;
Кластер серверов представляет собой совокупность одного или нескольких рабочих процессов
(rphost), агентов сервера (ragent) и менеджеров кластера (rmngr) на одном или нескольких
компьютерах.
Веб-сервер – необходим для работы веб-клиента и одного из вариантов работы тонкого клиента.
Клиент => Веб сервер => Кластер серверов
Сервер баз данных – хранит данные информационных баз. В качестве сервера баз-данных
могут использоваться различные СУБД.

4. Устройство кластера серверов

Компьютер на котором запущен ragent (агент
сервера), называется рабочим сервером.
Агент сервера ведет список кластера (srvribrg.lst)
который содержит:
• Список кластеров, которые зарегистрированы на
данном рабочем сервере;
• Список администраторов центрального сервера
Агент сервера и список кластеров не входит в состав
кластера серверов

5. Устройство кластера серверов

Кластер серверов включает в себя:
• Один или несколько процессов rmngr;
• Реестр кластера;
• Один или несколько процессов rphost.
Процесс rmngr (менеджер кластера) – управляет
функционированием всего кластера;
Рабочий сервер на котором функционирует менеджер
кластера и располагается реестр кластера, называется
центральным сервером кластера.

6. Устройство кластера серверов

По умолчанию кластер серверов содержит один
менеджер кластера, который называется
главным менеджером кластера.
Для масштабируемости могут быть определены
дополнительные менеджеры кластера.
Функциональность будет перераспределена
между ними.

7. Устройство кластера серверов

Менеджер кластера ведет реестр кластера
(1CV8Reg.lst), который содержит:
• Список информационных баз
зарегистрированных в данном кластере;
• Список рабочих серверов данного кластера;
• Список рабочих процессов данного кластера;
• Список дополнительных менеджеров
кластера;
• Соответствие сервиса кластера и
дополнительного менеджера кластера;
• Список администраторов кластера;

8. Устройство кластера серверов

Процесс rphost (рабочий процесс),
обслуживает клиентские приложения и
взаимодействует с сервером баз данных, в нем
могут исполняться процедуры серверных
модулей конфигурации.

9. Устройство кластера серверов

Функциональность менеджера кластера
разделена на несколько независимых
сервисов. Некоторые сервисы могут работать
только на Главном менеджере кластера.
Гл – только главный менеджер кластера;
Ре – сервис является ресурсоемким
Для ресурсоемких сервисов целесообразно
создавать дополнительные менеджеры
кластера

10. Взаимодействие клиентского приложения с кластером серверов

Процессы кластера между собой и с
клиентским приложением взаимодействуют по
протоколу TCP/IP
По умолчанию используются следующие
номера сетевых портов:
• Агент сервера – порт 1540;
• Менеджер кластера – порт 1541;
• Рабочий процесс – номер порта
динамический, по умолчанию используется
диапазон 1560:1591

11. Взаимодействие клиентского приложения с кластером серверов

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

12. Масштабируемость кластера серверов

На одном рабочем сервере может быть
запущено несколько рабочих процессов.
Рекомендуется 50-100 сеансов на один рабочий
процесс.
Рабочий процесс 32-разрядного сервера не
может занимать более 2Гб оперативной памяти.
Для 64-разрядного сервере таких ограничений
нет.

13. Масштабируемость кластера серверов

Кластер серверов может функционировать на
нескольких рабочих серверах.

14. Масштабируемость кластера серверов

Один рабочий сервер может являться
центральным для одного или нескольких
кластеров.

15. Масштабируемость кластера серверов

Один и тот же рабочий сервер может
являться центральным для одного
кластера и в то же время «обычным»
сервером для другого кластера.

16. Сеансы и соединения

Сеанс определяет активного пользователя информационной базы и поток управления этого
пользователя.
Активным пользователем может являться:
• экземпляр клиентского приложения «1С:Предприятия»;
• экземпляр веб-приложения, в котором исполняется веб-клиент;
• экземпляр внешнего соединения (полученный из объекта V82.COMConnector);
• один экземпляр фонового задания;
• одно обращение к Web-сервису.

17. Сеансы и соединения

Все данные, хранимые кластером, которые относятся к одному активному пользователю и
актуальны только на время работы этого пользователя, являются данными сеанса.
К данным сеанса относятся:
• наименование информационной базы
• номер сеанса
• имя аутентифицированного пользователя информационной базы
• язык интерфейса
• значения параметров сеанса
• временные хранилища
• статистику работы сеанса
• информацию форм управляемого приложения
• некоторые внутренние данные платформы

18. Сеансы и соединения

Изменения данных сеанса, выполненные за время одного вызова сервера, хранятся в рабочем
процессе и передаются менеджеру кластера только при возврате управления клиенту.
Изменения данных сеанса не сохраняются в менеджере кластера, если:
• в процессе вызова сервера аварийно завершился рабочий процесс;
• при возврате управления клиенту произошла ошибка передачи данных;
Данные сеансов сохраняет менеджер кластера, для этого предусмотрен сервис сеансовых
данных. Данные сеансов кэшируются в рабочих процессах.

19. Сеансы и соединения

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

20. Сеансы и соединения

Соединения с информационной базой имеют
следующие особенности:
• соединение выполняется с конкретной
информационной базой кластера;
• в таком соединении может выполняться код
на встроенном языке;
Виды соединений с ИБ:
• Толстый клиент;
• Тонкий клиент;
• Конфигуратор;
• Модуль расширения веб-сервера;
• соединение может переустанавливаться с
течением времени;
• COM-соединение;
• соединение может быть разорвано
принудительно командной консоли кластера
или средствами встроенного языка
• Фоновое задание.
• наличие соединений с ИБ у рабочего
процесса кластера препятствует остановке и
запуску этого рабочего процесса
• WS-соединение;

21. Сеансы и соединения

Служебные соединения имеют следующие
особенности:
• соединение выполняется с рабочими
процессом и не ассоциируется с конкретной
информационной базой;
• в служебных соединения код на строенном
языке не выполняется;
• соединение не может быть разорвано
принудительно оно создается и завершается
системой;
• наличие служебных соединений не
препятствует остановке и запуску рабочих
процессов кластера серверов.
Виды служебных соединений:
• Планировщик заданий;
• Отладчик;
• Консоль кластера;
• COM-администратор.

22. Клиент-серверная архитектура

В «1С:Предприятии» нет «единого пространства» для
выполнения кода на встроенном языке. Каждый фрагмент
кода выполняется в некотором контексте.
Контекст:
• «программное окружение», в котором исполняется код:
доступные свойства, методы, набор объектов
встроенного языка, которые можно использовать;
• определяет физическое место (конкретный компьютер),
на котором выполняется этот код.
Контекст разделяют на два вида:
• Контекст клиента;
• Контекст сервера.

23. Клиент-серверная архитектура

Важные отличия:
• На Клиенте доступны интерактивные
действия (отображение данных
пользователю, визуальное взаимодействие с
пользователем);
Передача данных между
Клиентом и Сервером
Взаимодействие между Клиентом и
Сервером одно из основных мест влияющих на
производительность и быстродействие
системы в целом.
Одна сеть
• На Сервере доступны действия, связанные с
доступом к данным СУБД (их чтение и
запись).

24. Предметы оптимизации

1.
Контроль количества вызовов.
2.
Контроль объема передаваемых данных (трафика).
Для оптимизации платформа действует по следующей методике:
• Передает на клиента только то, что нужно на клиенте.
• Передает не всю информацию сразу, а, по возможности, реализует принцип передачи "по
требованию", чтобы не передавать большие объемы данных.
• Передает информацию определенным порциями, чтобы не делать большого количества
вызовов сервера.
• Использует многоуровневое кэширование, чтобы не передавать повторно информацию, уже
переданную на клиента.

25. Форма – клиент-серверный объект

Форма – это программный объект, существующий в
памяти компьютера в какой-то момент работы
системы в режиме 1С:Предприятие.
Форма является связующим звеном в цепи
«пользователь – данные». Форма предназначена для
интерактивной работы пользователя.
Форма как программный объект существует и на
клиенте, и на сервере.
Для каждой процедуры в модуле формы
разработчик в явном виде указывает контекст ее
исполнения: на сервере или на клиенте.

26. Общий подход к программированию форм

• В явном виде программируем отдельно клиентскую и отдельно серверную части приложения;
• Управляем частотой вызовов сервера и объемом передаваемой информации;
• Отделяем код, реализующий бизнес-логику, от кода, реализующего интерфейс;
• Структура кода должна определяем логикой клиент-серверного взаимодействия;
• Клиентский код пишется прежде всего как сценарий передачи управления с клиента на сервер
и обратно;
• Клиент и сервер нужно рассматриваем как два взаимодействующих приложения;
• Воспринимаем вызов сервера как «непростой процесс»;

27. Передача между клиентом и сервером

Передавать между клиентом и сервером (в обе стороны) можно только немутабельные
значения (т.е. значения которых не могут изменяться):
• примитивные типы;
• ссылки;
• универсальные коллекции;
• значения системных перечислений;
• хранилище значения.
При попытке передать что-либо другое – аварийное завершение клиентского приложения.

28. Использование оперативной памяти

Все, что доступно из языка конфигурации является объектами.
Под каждый объект выделятся область памяти.
Объекты могут ссылаться друг на друга.
Есть мутабельные и немутабельные объекты.
Все значения примитивных типов (Строка, Число, Булево, Тип) являются немутабельными.
Все остальные типы, как правило, мутабельные (объекты этих типов могут
менять свое состояние).

29. Использование оперативной памяти

Управление временем жизни объектов:
Работа алгоритма подсчета ссылок на объекты:
• У каждого объекта есть целочисленный счетчик, в котором хранится количество
ссылок на него.
• Когда где-то сохраняется ссылка на объект, счетчик увеличивается на единицу,
когда очищается ссылка – уменьшается на единицу.
• Когда значение счетчика становится равным 0, объект автоматически удаляется.
• Ссылки на объекты могут храниться как в коде конфигурации (локальные
переменные на стеке), так и в других объектах.
• Также есть более долговременные хранилища объектов. Например, кеш
параметров сеанса, повторно используемые возвращаемые значения, временное
хранилище.
Недостаток алгоритма подсчета ссылок: невозможно автоматически разорвать
циклическую ссылку на объект (объекты).

30. Использование оперативной памяти

Циклические ссылки
Чем вредна циклическая ссылка?
• Возникает утечка памяти – объект (объекты) невозможно удалить.
• Также все объекты, на которые явно или неявно ссылается зацикленный
объект,
• будут находиться в памяти до окончания работы процесса операционной
• системы.
Утечки памяти – это не только дополнительно занимаемая память в
процессе:
• Например, на клиенте есть утечка управляемой формы.
• Данные формы на сервере не будут освобождены.
• Не снимется блокировка объекта базы данных, если его редактировали.

31. Выбрать() / Выгрузить()

Результат запроса загружается на сервер 1С в процессе выполнения запроса.
Если результат в память не помещается:
• Выбрать() – данные будут записаны на диск;
• Выгрузить():
• Для 32х – ошибка «Недостаточно памяти»;
• Для 64х – ошибки скорее всего не будет, возможно будет использован файл подкачки при нехватке оперативной
памяти;

32. Временные таблицы и Вложенные запросы

При выполнении запроса если есть временные таблицы, то на стороне СУБД формируются
временные файлы, которые удаляются после завершения запроса.

33. Выгрузка результатов запроса

При вложенном запросе данные постепенно
выгружаются в rphost.
При выполнении запроса результаты
выгружаются Rphost создает временные файлы
в
C:\Users\USR1CV8.KachalaevPCHome\AppData\
Local\Temp\v8_266E_d.tmp
Если используем выборку, то данные
постепенно считываются из темпа.
Если выгрузить, то данные выгружаются в
оперативную память (32).

34. Рекомендации при разработке, чтобы код одинаково хорошо работал на разных СУБД

• Рекомендуется не использовать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, т.к. если СУБД на
PostgreSQL, производительность выполнения запросов с этой конструкцией значительно
снижается;
• NULL по разному сортируется на разных СУБД, нужно это учитывать;
• Если требуется больше 8 разрядов дробной части, то следует использовать оператор
ВЫРАЗИТЬ чтобы привести число к нужному количеству разрядов (нужно учитывать
поддерживает ли СУБД нужную разрядность);
• В шаблонах не используем […] и [^…] т.к. они не работают на IBM DB 2;
• Длина шаблона не более 1024 символа (ограничения MS SQL 2005);
• Не следует использовать вложенные запросы в условии соединения. Это может привести к
значительному замедлению запроса и (в отдельных случаях) к его полной
неработоспособности на некоторых СУБД;

35. Механизмы кэширования

Кэширование – один из инструментов оптимизации работы платформы.
Основные уровни кэширования:
1.
Кэширование между сеансами.
Система запоминает то, что было получено на клиенте в сеансе и не получает эту информацию в последующих
сеансах. файлы конфигурации, пользовательские настройки интерфейса (расположение окон, панелей, отборов в отчетах, шрифты), а также промежуточные результаты запросов
Очищается частично при смене версии платформы, частично при обновлении конфигурации.
2.
Кэширование в пределах сеанса.
Система запоминает информацию, полученную в ходе сеанса и не получает ее при аналогичных вызовах в том же
сеансе.
хранятся временные данные для ускорения работы: файлы конфигурации, пользовательские настройки интерфейса (расположение окон, панелей, шрифты, отборы), промежуточные результаты
запросов, а также данные, введенные в поля форм, результаты работы механизмов типа "ПоместитьВоВременноеХранилище" и фоновых заданий, сбрасываемые при закрытии сеанса или формы.
Сбрасывается при окончании сеанса.
3.
Кэширование в пределах формы.
Система запоминает информацию, полученную для данной формы.
Сбрасывается при закрытии формы.

36. Механизмы кэширования

Сеансовые данные – механизм платформы 1С
В этих данных хранится служебная информация, необходимая для работы сеанса
"1С:Предприятия".
Например:
• Все, что введено в поля ввода на форме, при серверных вызовах сбрасывается в сеансовые данные.
• При вызове методов: ПоместитьВоВременноеХранилище, ПоместитьФайл, НачатьПомещениеФайла, значения
указанные в параметрах, записываются в сеансовые данные.
• При фоновом исполнении отчетов СКД, результат отчета помещается в сеансовые данные, а затем передается в
клиентскую часть.
С точки зрения операционной системы, сеансовые данные представляют собой файлы в каталоге
…\Program Files\1cv8\\srvinfo\reg_<номер порта>\snccntx<GUID>
С точки зрения внутренней структуры - это noSQL база данных (key-value storage).

37. Механизмы кэширования

Сеансовые данные – механизм платформы 1С
Во всем объеме сеансовых данных, существуют как актуальные, так и устаревшие данные.
Актуальность данных определяется способом их помещения:
• Если сеансовые данные помещены из формы и в качестве идентификатора передается
идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные считаются
актуальными, пока открыта форма.
• Если в качестве идентификатора передан УникальныйИдентификатор, не являющийся
уникальным идентификатором формы (Новый УникальныйИдентификатор), то значение
перестанет быть актуальным после завершения сеанса пользователя.
• Если ничего не передано, то значение перестанет быть актуальным при любом следующем
серверном вызове

38. Механизмы кэширования

Сеансовые данные – механизм платформы 1С
Порядок размещения сеансовых данных.
Если поместить во временное хранилище двоичные данные или файл, то эти данные пройдут в
качестве потока байт через rphost, затем в rmngr, который сбросит этот поток на диск.
Если же, в качестве помещаемого значения, будет выступать коллекция (таблица значений,
результат запроса, массив…), то сначала вся эта коллекция разместиться в памяти rphost, а
только затем преобразуется в поток байт и будет передана в rmngr.
За работу с сеансовыми данными отвечает менеджер кластера – rmngr.exe
Процесс rphost.exe называется рабочим процессом. Рабочий процесс обслуживает
непосредственно клиентские приложения, взаимодействует с сервером баз данных и в нем, в
частности, могут исполняться процедуры серверных модулей конфигурации.

39. Механизмы кэширования

Влияние циклических ссылок на рост сеансовых данных
Чаще всего при выполнении процедуры ПоместитьВоВременноеХранилище, указывается
идентификатор формы (ЭтаФорма.УникальныйИдентификатор). Как написано в документации,
при указании идентификатора формы данные перестают считаться актуальными после того как
форма будет закрыта.
Однако, если форма содержит в себе циклические ссылки, то после закрытия формы она не
уничтожается. Это приводит следующим отрицательным эффектам:
• данные формы остаются в памяти
• сеансовые данные, выделенные для формы, считаются актуальными, пока не будет завершен сеанс
Чтобы избежать данной ситуации, необходимо исключить все циклические ссылки в форме.
Необходимо стараться формировать отчеты СКД в фоновом режиме. Так как результат отчета
помещается во временное хранилище фоновым заданием, то после завершения задания данный
результат будет считаться неактуальным.

40. Механизмы кэширования

Кэш представлений и объектов
Состоит из двух частей:
транзакционного и обычного кэша.

41. Механизмы кэширования

Обычный кэш
Если при обращении к кэшу требуемых данных в нем нет, то выполняется чтение данных
объекта из базы данных и сохранение их в кэше.
Уникальным идентификатором будет являться ссылка на объект базы данных.
Поэтому данные считанного объекта могут существовать в кэше:
либо все данные объекта, либо представление объекта.

42. Механизмы кэширования

Обычный кэш
Данные в кэше считаются валидными в пределах 20 секунд после поступления данных в кэш.
Считанные данные будут находиться в кэше, пока не наступит одно из четырех событий:
• считанные данные будут вытеснены из кэша другими считанными данными других объектов
(переполнение кэша);
• при очередном обращении к кэшу окажется, что считанные данные были изменены в базе
данных;
• закончится интервал времени в 20 минут;
• данные будут изменены в базе данных.

43. Механизмы кэширования

Транзакционный кэш
Если обращение к данным происходит в рамках транзакции, то оно переадресуется
транзакционному кэшу.
Транзакционный кэш отличается от обычного кэша, тем, что все данные, находящиеся кэше,
являются валидными (гарантированно актуальными).
Данные хранятся, пока они не будут вытеснены более поздними считанными данными или
пока не закончится транзакция.

44. Механизмы кэширования

Транзакционный кэш
По окончании транзакции кэш очищается.
Если транзакция завершена успешно (Commit),
данные всех объектов, содержащиеся в
транзакционном кеше, переносятся в обычный
кеш, а транзакционный кеш очищается.
Если был выполнен отказ от изменений
(Rollback), то просто очищается
транзакционный кеш

45. Механизмы кэширования

Модули с повторным использованием возвращаемых значений предусмотрены для
кэширования результатов работы функций, которые в них размещены - на время сеанса или на
время вызова.
Кэшированное значение будет удалено:
• через 20 минут после вычисления или через 6 минут после последнего использования (в
зависимости от того, что наступит раньше*).
• при нехватке оперативной памяти в рабочем процессе сервера
• при перезапуске рабочего процесса
• при переключении клиента на другой рабочий процесс.

46. Механизмы кэширования

Модули с повторным использованием возвращаемых значений
Ограничения если установлено значение «На время сеанса»
то в значениях, возвращаемых функциями такого модуля, нельзя использовать значения типа
МенеджерВременныхТаблиц, Запрос, объекты базы данных (например, ДокументОбъект,
ОтчетОбъект) причем, как непосредственно, так и в составе любых коллекций.
Ограничение вызвано тем, что значения этих типов допустимо использовать только в том же
серверном вызове, в котором они были получены (созданы).
Возврат значений этих типов в указанных функциях не проверяется платформой и приводит к
трудно диагностируемой остановке работы программы (записи есть только в технологическом
журнале).
Данное ограничение распространяется на использование значений во временном хранилище.

47. Примеры оптимизации клиент-серверного взаимодействия

Примеры
оптимизации клиентсерверного взаимодействия

48. Объединение нескольких вызовов сервера в один

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

49. Объединение нескольких вызовов сервера в один

Решение 1: Создать универсальную функцию, которая будет возвращать значение реквизита, при
изменении номенклатуры вызывать эту функцию.

50. Объединение нескольких вызовов сервера в один

Решение 2: Объединить запросы и получить нужные реквизиты одним вызовом сервера
(+функцию переписать на получение реквизитов запросом, а не «через точку»).

51. Объединение нескольких вызовов сервера в один

Решение 2:

52. Использование внеконтекстных серверных процедур в модуле формы

Задача. При изменении товара получать последнюю цену из РС.Цены

53. Использование внеконтекстных серверных процедур в модуле формы

Решение 1. Создаем контекстную процедуру на Сервере, вызываем при изменении поля Товар

54. Использование внеконтекстных серверных процедур в модуле формы

Решение 2. Создаем внеконтекстную процедуру на Сервере, вызываем при изменении поля
Товар, заполняем на клиенте.

55. Использование внеконтекстных серверных процедур в модуле формы

Решение 2.
Внеконтекстный вызов
Контекстный вызов

56. Использование клиентских процедур для небольших расчетов данных формы

Размещаем процедуру на клиенте, если:
• Не нужны данные из БД;
• Все нужные данные уже имеются на клиенте;
• Выполняемые вычисления не сложны, не требуют значительных ресурсов компьютера;
• Изменения не массовые;

57. Использование контекстных серверных процедур для пересчета данных коллекций форм

Изменять данные коллекций форм (табличные части, таблицы значений) лучше на сервере.
Если же аналогичные действия выполнять на клиенте, то все данные коллекций форм будут
переданы на клиент, хотя они не требуются для отображения в форме.

58. Управление открываемой формой путем передачи параметров

Чтобы открыть форму в некотором нужном состоянии, рекомендуется использовать метод
ОткрытьФорму() и при этом передавать в него параметры. Форма будет открыта за один
серверный вызов.
Не рекомендуется открывать форму с помощью метода ПолучитьФорму() и затем обращаться к
ее свойствам и методам, так как изменение свойств и методов формы на клиенте может привести
к лишним обращениям на сервер.

59. Реализация функциональности в клиентских и серверных обработчиках событий формы в зависимости от их назначения

Большая часть кода должна быть реализована в серверных обработчиках событий формы.
Форма должна быть максимально подготовлена для открытия в обработчиках событий
ПриЧтенииНаСервере и ПриСозданииНаСервере,
В обработчике ПриОткрытии нужно выполнять только действия, недоступные на сервере:
показать предупреждение, задать вопрос и т. п.

60. Использование стандартных полей запроса в динамических списках на клиенте

Если нужно получать значения стандартных реквизитов объекта в динамических списках на
клиенте, устанавливая флажок Использовать всегда, вместо того чтобы обращаться на сервер
за этими значениями.

61. Использование стандартного параметра формы отчета для автоматического формирования отчета при его открытии

Если необходимо формировать отчет при открытии, то нужно использовать параметр
СформироватьПриОткрытии и передавать его в форму при открытии.
Или же можно установить параметр формы СформироватьПриОткрытии в значение Истина в
обработчике события формы ПриСозданииНаСервере.
При открытии формы отчета настоятельно не рекомендуется выполнять обращения к серверу,
например формировать отчет, из кода модуля формы в обработчиках клиентских событий формы,
таких как ПриОткрытии и ПриПовторномОткрытии. Это потребует лишнего обращения к
серверу и будет неэффективно.

62. Получение предопределенных значений на клиенте

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

63. Запись данных объекта в единой транзакции за один серверный вызов

Действия, логически объединенные в одну транзакцию (например, запись реквизитов объекта),
нужно выполнять в одном серверном вызове.
Это обеспечит согласованность данных объекта и избавит от лишних вызовов сервера.

64. Использование временного хранилища для передачи данных между формами

Если можно лишний раз не передавать данные между клиентом и сервером, лучше их не
передавать.
При передаче данных между формой объекта и формой подбора рекомендуется использовать
временное хранилище, чтение и запись которого должны выполняться на сервере.
Потенциально большой массив данных не рекомендуется передавать в качестве параметра
формы подбора.

65. Изменение оформительских свойств элементов формы, не требующих обращения к серверу

Если логика интерактивной работы формы требует изменения ее внешнего вида, лучше
использовать те свойства, изменение которых на клиенте не приводит к обращениям на сервер.
Рекомендуется не использовать формы, меняющие состав и положение элементов. И вообще,
если есть такая возможность, лучше не использовать свойства и методы встроенного языка,
приводящие к вызову сервера.

66. Инструменты используемые для оптимизации

67. Инструменты, используемые при оптимизации клиент-серверного взаимодействия

В процессе отладки и работы конфигурации доступны инструменты при оптимизации клиентсерверного взаимодействия:
• Показатели производительности.
• Режим низкой скорости соединения.
• Режим имитации задержек при вызове сервера.
• Отображение серверных вызовов в замерах производительности.
• Проверка серверных вызовов в обработчиках событий.

68. Показатели производительности

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

69. Показатели производительности

Показатели производительности прикладного решения позволяют оценить, насколько
эффективно работает прикладное решение. Они дают информацию о количестве текущих и
накопленных вызовов сервера, длительности вызовов сервера, объеме принятых и
отправленных данных.
Текущие вызовы – это вызовы сервера с момента последнего действия пользователя.
Накопленные вызовы – это вызовы сервера с момента запуска приложения или с момента
обнуления накопленных показателей.
Принято – это объем данных, принятых клиентом от сервера.
Отправлено – это объем данных, отправленных с клиента на сервер.
Значок в информационной панели приложения означает, что отображение показателей
производительности включено.
Включить/выключить его можно как в настройках конфигуратора, так и в режиме
1С:Предприятие.

70. Показатели производительности

1.Конфигуратор
2. 1С Предприятие
3. Настройка состава показателей
Также можно включить, запустив «1С:Предприятие» из командной строки с параметром
/DisplayPerformance.

71. Режим низкой скорости соединения

Режим низкой скорости соединения – это
способ работы клиентского приложения,
позволяющий ему функционировать на
медленных каналах связи как можно
эффективнее.
В этом режиме платформа оптимизирует
взаимодействие с сервером, отключает
некоторую функциональность прикладного
решения – например:
• не показывает начальную страницу и
картинки разделов
• объединяет и минимизирует вызовы
сервера
• дополнительно сжимает данные

72. Режим низкой скорости соединения

1.
В свойствах ИБ
2. В диалоге выбора ИБ
Режим работает для тонкого и веб-клиента.
3. В режиме «Конфигуратор»

73. Режим имитации задержек при вызове сервера

Режим имитации задержек при вызове сервера – режим в котором платформа будет работать
с теми временными задержками, с которыми работает реальный канал связи.
При включении режима в информационной панели приложения появится значок:

74. Режим имитации задержек при вызове сервера

1. В режиме «Конфигуратор»
2. В режиме «1С:Предприятие»
Работает только для тонкого и толстого клиента в режиме управляемого приложения.

75. Различия между режимами «Низкой скорости» и «Имитации задержек»

Режим низкой скорости соединения – это, скорее, инструмент пользователя,
чтобы приложение работало быстрее на медленных каналах.
Режим имитации задержек при вызове сервера – это инструмент разработчика,
чтобы приложение работало медленнее на быстрых каналах..

76. Замер производительности

Замер производительности
позволяет оценить скорость
работы всей конфигурации
или любой ее части в
процессе отладки.
• измеряются частота и
скорость выполнения
отдельных участков кода;
• где выполнялся код (на
сервере или на клиенте);
• помечаются строки кода,
приведшие к вызову
сервера;

77. Замер производительности

1.
Для начала замера выполняем команду главного меню Отладка – Замер
производительности.
2.
Для окончания замера повторно команду главного меню Отладка – Замер
производительности.
3.
В конфигураторе откроется окно с результатами замера производительности, выполненного
между этими двумя нажатиями.

78. Замер производительности

вызовы сервера методами объектов встроенного языка, вызовы процедур и функций,
исполнение которых происходит на сервере;
вызовы клиентских процедур и функций, в которых тем или иным способом происходил
вызов сервера;
строки кода на встроенном языке, исполнение которых происходило на клиенте;
строки кода на встроенном языке, исполнение которых происходило на сервере;

79. Проверка серверных вызовов в обработчиках событий

В некоторых клиентских обработчиках событий формы
запрещается вызывать контекстные серверные процедуры,
например такие события как:
• ПередЗаписью()
• ПослеЗаписи()
• ПередЗакрытием()
• ПриЗакрытии()
Можно включить режим проверки контекстных
серверных вызовов в обработчиках событий, в которых
вызовы сервера запрещены (параметр командной строки
/EnableCheckServerCalls).

80. The end

English     Русский Rules