Платформа 3V/Формы/Рекомендации по использованию и оптимизации: различия между версиями
< Платформа 3V | Формы
Перейти к навигации
Перейти к поиску
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 3: | Строка 3: | ||
# Если в формах используется получение значения связанных атрибутов справочников больших объемов, необходимо прописывать настройку данного атрибута как получение значения транзитивного атрибута справочника, а не как связанного, через конструкцию TransitiveAttributeDefinitionDto. Данная настройка используется потому, что связанный атрибут влечет построение всего связанного справочника, а транзитивный - только используемых значений. Аналогичную настройку необходимо использовать при настройке отчетов. | # Если в формах используется получение значения связанных атрибутов справочников больших объемов, необходимо прописывать настройку данного атрибута как получение значения транзитивного атрибута справочника, а не как связанного, через конструкцию TransitiveAttributeDefinitionDto. Данная настройка используется потому, что связанный атрибут влечет построение всего связанного справочника, а транзитивный - только используемых значений. Аналогичную настройку необходимо использовать при настройке отчетов. | ||
# В формах должны присутствовать только те контролы, источники, выражения, правила/условия и действия, которые используются в текущей форме, не должно быть лишних источников, выражений, условий и действий, которые не используются. | # В формах должны присутствовать только те контролы, источники, выражения, правила/условия и действия, которые используются в текущей форме, не должно быть лишних источников, выражений, условий и действий, которые не используются. | ||
− | # Для раскрывающегося списка, источником которого является большой справочник необходимо настроить серверный поиск. | + | # Для раскрывающегося списка, источником которого является большой справочник необходимо настроить серверный поиск. При серверном поиске выбор значения происходит при вводе и поиске введенного значения по справочнику. |
# По возможности, не злоупотреблять настройкой disableDataEditingRuleId, где указывается условие блокировки контролов при открытии формы, лучше настраивать блокировку на уровне прав всей формы, либо для каждого контрола отдельно. | # По возможности, не злоупотреблять настройкой disableDataEditingRuleId, где указывается условие блокировки контролов при открытии формы, лучше настраивать блокировку на уровне прав всей формы, либо для каждого контрола отдельно. | ||
− | # Желательно использовать меньше выражений типа | + | # Желательно использовать меньше выражений типа EntryExpressionByDictionaryRequest и EntryExpressionDictionaryDataFilterByIndicatorParameter, где происходит запрашивание справочника для каждого выражения данного типа. |
# Продумывать использование настройки doActionOnChangeValue для контрола, чтобы не происходило постоянного обновления зависимых объектов при изменении значения в контроле, включать данную настройку только для тех контролов, при изменении которых необходимо выполнение действия для дальнейшего заполнения формы. | # Продумывать использование настройки doActionOnChangeValue для контрола, чтобы не происходило постоянного обновления зависимых объектов при изменении значения в контроле, включать данную настройку только для тех контролов, при изменении которых необходимо выполнение действия для дальнейшего заполнения формы. | ||
# Выключать настройку isReadOnly для справочников необходимо только в том случае, если действительно необходимо сохранение данных в источник при выполнении действия сохранения всех источников, чтобы не происходило сохранения тех источников, которые этого не требуют. | # Выключать настройку isReadOnly для справочников необходимо только в том случае, если действительно необходимо сохранение данных в источник при выполнении действия сохранения всех источников, чтобы не происходило сохранения тех источников, которые этого не требуют. | ||
− | # Для источников | + | # Для минимизации перестроения источников необходимо проверить необходимость присутствия в контроле "rebuildDependentsObjectOnChange": true, и выставить "rebuildDependentsObjectOnChange": false для тех контролов, которые не предполагают обновления других элементов на странице при смене значения. |
+ | # Проверить наличие действий во время открытия формы в conditionActionIdsOnOpen и удостовериться, что все действия по открытию карточки действительно нужны и быстро отрабатывают. | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;"> | ||
+ | <div style="font-weight:bold;line-height:1.6;">Пример задания серверного поиска в контроле выпадающего списка</div> | ||
+ | <div class="mw-collapsible-content mw-collapsed-content"> | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "discriminator": "DictionarySourceEntry", | ||
+ | "dataSourceId": 1, | ||
+ | "expressionId": null, | ||
+ | "id": 1, | ||
+ | "caption": "Проекты", | ||
+ | "enable": true, | ||
+ | "enableRuleIds": [], | ||
+ | "searchSettings": { | ||
+ | "maxElements": 500, //количество выводимых элементов в поиске | ||
+ | "minInputChars": 2, // минимальное число символов для начала поиска | ||
+ | "searchMode": "Dictionaries", // обозначение серверного поиска | ||
+ | "debounceMs": 300 //время отклика | ||
+ | }, | ||
+ | "hasServerFiltration": true, | ||
+ | "maxElements": 100, | ||
+ | "displayAttribute": { | ||
+ | "id": 2, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "doActionOnChangeValue": true, | ||
+ | "hasMultipleValue": true, | ||
+ | "hasNullableValue": false | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div></div> | ||
=== Метрики === | === Метрики === | ||
Для анализа можно пользоваться метриками. Каждый сервис платформы предоставляет как стандартный набор метрик (потребление памяти и т. п.), так и специфические для конкретного сервиса, по адресу '''http(s)://<host>/<service>/metrics'''<br> | Для анализа можно пользоваться метриками. Каждый сервис платформы предоставляет как стандартный набор метрик (потребление памяти и т. п.), так и специфические для конкретного сервиса, по адресу '''http(s)://<host>/<service>/metrics'''<br> | ||
Визуальное их отображение настроено в графане: | Визуальное их отображение настроено в графане: | ||
− | * [https://grafana.3v-group.net/d/BlsUbysGz/3v- | + | * [https://grafana.3v-group.net/d/BlsUbysGz/3v-formy?orgId=1 на стенде 3v-group.net] |
− | * [https://grafana. | + | * [https://grafana.dev.3v-cloud.com/d/BlsUbysGz/3v-formy?orgId=1 на стенде dev.3v-cloud.com] |
− | Следует обращать особое внимание на графики "макс. кол-во элементов справочников по Id | + | * [https://grafana.3v-cloud.ru/d/BlsUbysGz/3v-formy?orgId=1 на стенде 3v-cloud.ru] |
− | + | * [https://grafana.3v-cloud.com/d/BlsUbysGz/3v-formy?orgId=1 на стенде 3v-cloud.com] | |
+ | Следует обращать особое внимание на: | ||
+ | * графики "макс. кол-во элементов справочников по Id форм" (метрика cards_instance_max_dictionary_element_count) и "суммарное кол-во элементов справочников по Id форм" (метрика cards_instance_total_dictionary_element_count) для обнаружения карточек, в которые загружаются большие справочники; | ||
+ | * таблицы "среднее время открытия форм (сек)" и "максимальное время открытия форм (сек.)". Особое внимание стоит уделять формам, которые открывает или будет открывать обычный пользователь. Чем выше время, тем меньше людей смогут параллельно работать с системой. Рекомендуемое время открытия - менее 5 сек. Все что больше - это точно повод задуматься и посмотреть, что стоит настроить иначе; | ||
+ | * на кол-во открытых на данный момент карточек (метрика cards_instances_total). Если отображается кол-во, не соответствующее действительности (пользователь уже закрыл карточки, а они числятся открытыми), то это повод завести ошибку на платформу. |
Текущая версия на 13:26, 20 декабря 2022
Рекомендации по настройкам форм:
- Минимизировать действия при открытии формы, которые направлены на перестроение и получение данных из отчетов и справочников больших объемов. Например, открывать форму со значениями по умолчанию, либо, при открытии формы с параметром, настроить отложенное построение отчетов.
- Если в формах используется получение значения связанных атрибутов справочников больших объемов, необходимо прописывать настройку данного атрибута как получение значения транзитивного атрибута справочника, а не как связанного, через конструкцию TransitiveAttributeDefinitionDto. Данная настройка используется потому, что связанный атрибут влечет построение всего связанного справочника, а транзитивный - только используемых значений. Аналогичную настройку необходимо использовать при настройке отчетов.
- В формах должны присутствовать только те контролы, источники, выражения, правила/условия и действия, которые используются в текущей форме, не должно быть лишних источников, выражений, условий и действий, которые не используются.
- Для раскрывающегося списка, источником которого является большой справочник необходимо настроить серверный поиск. При серверном поиске выбор значения происходит при вводе и поиске введенного значения по справочнику.
- По возможности, не злоупотреблять настройкой disableDataEditingRuleId, где указывается условие блокировки контролов при открытии формы, лучше настраивать блокировку на уровне прав всей формы, либо для каждого контрола отдельно.
- Желательно использовать меньше выражений типа EntryExpressionByDictionaryRequest и EntryExpressionDictionaryDataFilterByIndicatorParameter, где происходит запрашивание справочника для каждого выражения данного типа.
- Продумывать использование настройки doActionOnChangeValue для контрола, чтобы не происходило постоянного обновления зависимых объектов при изменении значения в контроле, включать данную настройку только для тех контролов, при изменении которых необходимо выполнение действия для дальнейшего заполнения формы.
- Выключать настройку isReadOnly для справочников необходимо только в том случае, если действительно необходимо сохранение данных в источник при выполнении действия сохранения всех источников, чтобы не происходило сохранения тех источников, которые этого не требуют.
- Для минимизации перестроения источников необходимо проверить необходимость присутствия в контроле "rebuildDependentsObjectOnChange": true, и выставить "rebuildDependentsObjectOnChange": false для тех контролов, которые не предполагают обновления других элементов на странице при смене значения.
- Проверить наличие действий во время открытия формы в conditionActionIdsOnOpen и удостовериться, что все действия по открытию карточки действительно нужны и быстро отрабатывают.
Пример задания серверного поиска в контроле выпадающего списка
1 {
2 "discriminator": "DictionarySourceEntry",
3 "dataSourceId": 1,
4 "expressionId": null,
5 "id": 1,
6 "caption": "Проекты",
7 "enable": true,
8 "enableRuleIds": [],
9 "searchSettings": {
10 "maxElements": 500, //количество выводимых элементов в поиске
11 "minInputChars": 2, // минимальное число символов для начала поиска
12 "searchMode": "Dictionaries", // обозначение серверного поиска
13 "debounceMs": 300 //время отклика
14 },
15 "hasServerFiltration": true,
16 "maxElements": 100,
17 "displayAttribute": {
18 "id": 2,
19 "discriminator": "OwnAttributeDefinitionDto"
20 },
21 "doActionOnChangeValue": true,
22 "hasMultipleValue": true,
23 "hasNullableValue": false
24 }
Метрики
Для анализа можно пользоваться метриками. Каждый сервис платформы предоставляет как стандартный набор метрик (потребление памяти и т. п.), так и специфические для конкретного сервиса, по адресу http(s)://<host>/<service>/metrics
Визуальное их отображение настроено в графане:
Следует обращать особое внимание на:
- графики "макс. кол-во элементов справочников по Id форм" (метрика cards_instance_max_dictionary_element_count) и "суммарное кол-во элементов справочников по Id форм" (метрика cards_instance_total_dictionary_element_count) для обнаружения карточек, в которые загружаются большие справочники;
- таблицы "среднее время открытия форм (сек)" и "максимальное время открытия форм (сек.)". Особое внимание стоит уделять формам, которые открывает или будет открывать обычный пользователь. Чем выше время, тем меньше людей смогут параллельно работать с системой. Рекомендуемое время открытия - менее 5 сек. Все что больше - это точно повод задуматься и посмотреть, что стоит настроить иначе;
- на кол-во открытых на данный момент карточек (метрика cards_instances_total). Если отображается кол-во, не соответствующее действительности (пользователь уже закрыл карточки, а они числятся открытыми), то это повод завести ошибку на платформу.