Управление режимом загрузки данных и кэширование
Режим загрузки данных устанавливается для всех секций карточки на этапе создания её схемы, но может быть переопределен свойствами: CardData.FetchMode
(действует на всю карточку) и SectionData.FetchMode
(действует на конкретную секцию).
В приведенном примере Схема карточки определяет механизм загрузки её данных из базы данных, Схема карточки определяет режим загрузки её данных из базы данных.
Для сценариев, связанных с получением данных карточки, актуально такое понятие, как режим загрузки данных, который определяет порцию информации, загружаемой с сервера Docsvision, за одно обращение. Режим загрузки может иметь одно из следующих значений (см. описание перечисления FetchMode
):
-
Card
— будут загружены данные всех секций карточки (актуально только для карточки в целом). -
Section
— при обращении к какой-либо строке секции будут загружены все её строки, в т.ч. данные её подсекций. -
SubSection
— будут загружены данные одной подсекции, к которой идет обращение. -
Level
— будут загружены данные только запрашиваемого уровня иерархической секции.
Для повышения производительности данные читаются не по одной строке, а блоками — уровнями или подсекциями. Сделано это из соображений о том, что задержки на передачу данных содержат в себе константу — стоимость сетевого вызова. Таким образом, иногда выгоднее получить больше данных за один раз, чем несколько раз обращаться к серверу за маленькими порциями.
С другой стороны, могут существовать карточки, которые содержат сотни тысяч строк (например, справочники). Попытка загрузить все данные такой карточки за один вызов приведёт к чрезмерной задержке, поэтому в такой ситуации более оптимальным было бы получать данные меньшими порциями по мере их востребованности.
Режим загрузки данных определяется для всей карточки в целом на этапе создания схемы данных в программе "CardManager", входящей в Resource Kit и распространяется на все её секции. Однако, в режиме исполнения (runtime) разработчик может переопределить это поведение (для карточки или для конкретных секций). Для этого служит свойство FetchMode
объектов CardData
и SectionData
.
Режим построчной загрузки ( |
-
CardData
— точка входа к основным данным карточки (контейнеру). -
SectionData
— доступ к секциям карточки. -
SubSectionData
— доступ к подсекциям карточки.
Кэширование данных
Говоря про загрузку данных, нельзя не упомянуть про кэширование. В ObjectManager
имеется кэш на чтение и, таким образом, повторное чтение строк вернёт уже загруженные данные. При этом надо понимать, что строки в кэше могли быть изменены на сервере, а это может привести к тому, что на клиенте окажутся неактуальные данные.
ObjectManager
предусмотрен механизм обновления строк:-
Явный — у всех объектов есть метод
Refresh
(возможно, с параметрами), с помощью которого можно обновить данные вручную. -
Неявный — при получении карточки (
CardData
) производится проверка наличия данных карточки в кэше. Если данные есть, но они потеряли актуальность, например на сервере произошло изменение строки, принадлежащей карточке, вызывается процедура обновления.
Неявный характер обновления данных во втором случае нужно всегда иметь в виду и избегать частого повторного получения данных карточки. В этом случае всегда производится серверный вызов — обновляется информация о статусе карточки (если такая карточка уже получалась ранее).
Существует также возможность очистить весь кэш одним вызовом — для этого предназначен метод PurgeCache
экземпляра CardManager
.