Кэширование записей в каталогах
Одной из наиболее частых операций в приложении является получения записи в каталоге по ее ID, например при вызове атрибутов ForeignElem, ForeignDispName и др. Поскольку такие операции часто вызываются массово (например при показе ячеек в списках), встает вопрос об их эффективности. Дело в том, что в случае вызова такой операции на рабочем месте сетевой версии приложения, потребуется обращение к серверу за каждой записью, поскольку полное содержимое каталогов доступно только на сервере.
Для эффективного выполнения таких операция реализован функция кэширования записей в каталогах для рабочего места сетевой версии приложения. Существуют две модели кэширования:
Полное кэширование. Обычно используется для каталогов ограниченного размера, например справочников. В этой модели при первом обращении к записи каталога по ID происходит загрузка всех элементов каталога в кэш на рабочем месте, и в дальнейшем все данные берутся из кэша.
Дискретное кэширование. Обычно используется для большинства каталогов, содержащих неограниченный объем данных. В этой модели при обращении к любой записи каталога, сначала проверяется ее наличие в КЭШе, и если запись есть в кэше, возвращаются данные из кэша, а если записи в кэше нет - данная запись загружается с сервера.
По умолчанию выбор модели кэширования происходит автоматически при подключении рабочего места к серверу приложения, при этом используются данные о количестве записей в каждом из каталогов. Также модель кэширования можно задать вручную.
При сохранении или удалении какого-либо из объектных документов, кэш соответссвующего каталога обнуляется. Тоже самое происходит на стандартную команду Refresh (F5).
В новой объектной модели сокращенная форма списка (LIST) генерирует запрос XQuery с опцией preload-foreign-data=1, которая автоматчики заполняет кэши каталогов, на которые есть ссылки через FOREIGN-ELEM из результата запроса, недостающими элементами.
Аналогичная система кэширования используется на сервере приложения в случае использования встроенного SQL-провайдера (новая объектная модель).