Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Предостережение
Набор средств Microsoft Graph не рекомендуется использовать. Период выхода на пенсию начинается 1 сентября 2025 года, а полный выход на пенсию запланирован на 28 августа 2026 года. Разработчикам следует перейти на использование пакетов SDK для Microsoft Graph или других поддерживаемых средств Microsoft Graph для создания веб-интерфейсов. Дополнительные сведения см. в объявлении об устаревании.
Microsoft Graph Toolkit поддерживает кэширование выбранных вызовов API Microsoft Graph. Вызовы кэшируются для каждой сущности, например людей, контактов, фотографий. Это позволяет одному компоненту извлекать данные, а другим компонентам — повторно использовать их без вызова Microsoft Graph.
Совет
Дополнительные сведения о том, какие сущности кэшируются каждым компонентом, см. в документации для этого компонента.
Базы данных, созданные с помощью набора средств для кэширования, имеют префикс mgt-. Данные для каждой сущности хранятся в отдельном хранилище объектов. Чтобы проверить кэш, используйте вкладку Приложение на панели разработчика (средства F12). В разделе Хранилище выберите вкладку IndexedDB .
Конфигурация кэша
Вы можете читать и записывать параметры кэша с помощью объекта статического класса CacheService.config. В следующем примере показан формат .
let config = {
defaultInvalidationPeriod: number,
isEnabled: boolean,
people: {
invalidationPeriod: number,
isEnabled: boolean
},
photos: {
invalidationPeriod: number,
isEnabled: boolean
},
users: {
invalidationPeriod: number,
isEnabled: boolean
},
presence: {
invalidationPeriod: number,
isEnabled: boolean
},
groups: {
invalidationPeriod: number,
isEnabled: boolean
},
response: {
invalidationPeriod: number,
isEnabled: boolean
},
files: {
invalidationPeriod: number,
isEnabled: boolean
},
fileLists: {
invalidationPeriod: number,
isEnabled: boolean
}
};
Для отдельных периодов недействительности кэша в объекте конфигурации по умолчанию задано значение null, а общее значение по умолчанию для defaultInvalidationPeriod составляет 3 600 000 мс (60 минут). Любое значение, переданное в config.x.invalidationPeriod, переопределяет defaultInvalidationPeriod.
Единственным исключением является хранилище присутствия со значением по умолчанию 300 000 мс, или 5 минут.
Примеры
Чтобы отключить хранилище, просто задайте для isEnabled в свойствах конфигурации хранилища значение false:
import { CacheService } from '@microsoft/mgt-element';
CacheService.config.users.isEnabled = false;
Отключение кэша не очищает кэш.
Изменить период недействительности можно следующим образом:
import { CacheService } from '@microsoft/mgt';
CacheService.config.users.invalidationPeriod = 1800000;
Очистка кэша
Кэш автоматически очищается, когда пользователь выходит. Его также можно очистить вручную.
Чтобы очистить все хранилища в кэше для пользователя, выполнившего вход, используйте clearCacheById() метод CacheService класса , указав идентификатор кэша пользователя. Чтобы получить идентификатор кэша пользователя, вызовите getCacheId метод из Providers класса .
import { Providers } from '@microsoft/mgt';
import { CacheService } from '@microsoft/mgt-element';
const cacheId = await Providers.getCacheId();
await CacheService.clearCacheById(cacheId);
Создание собственных хранилищ кэша
Если вы хотите создать и заполнить собственные хранилища кэша для пользовательских компонентов, используйте статический CacheService класс.
CacheService.getCache(schema: CacheSchema, storeName: String);
Примечание. Объект
storeName, на который вы ссылаетесь в вызовеgetCache(), должен соответствовать одному из хранилищ, перечисленных в объектеCacheSchema.
Объект CacheSchema является словарем с парами "ключ-значение".
import { CacheSchema } from '@microsoft/mgt-element';
const cacheSchema: CacheSchema = {
name: string,
stores: {
store1: {},
store2: {},
...
},
version: number
};
В примере ниже показана реализация кэша.
import { CacheItem, CacheSchema, CacheService, CacheStore } from '@microsoft/mgt-element';
const cacheSchema: CacheSchema = {
name: 'users',
stores: {
users: {},
usersQuery: {}
},
version: 1
};
interface CacheUser extends CacheItem {
user?: string;
}
// retrieves invalidation time from cache config
const getUserInvalidationTime = (): number =>
CacheService.config.users.invalidationPeriod || CacheService.config.defaultInvalidationPeriod;
// checks for if cache is enabled
const usersCacheEnabled = (): boolean => CacheService.config.users.isEnabled && CacheService.config.isEnabled;
// declare the desired cache store
let cache: CacheStore<CacheUser>
// check if the cache is enabled
if (usersCacheEnabled()) {
cache = CacheService.getCache<CacheUser>(cacheSchema, 'users');
const user = await cache.getValue(query);
// check if an item is retrieved, and if it's not expired
if (user && getUserInvalidationTime() > Date.now() - user.timeCached) {
return JSON.parse(user.user);
}
}
// graph call
const graphRes = graph
.api('me')
.middlewareOptions(prepScopes('user.read'))
.get();
// store graph result into the cache if cache is enabled
if (usersCacheEnabled()) {
cache.putValue(userId, { user: JSON.stringify(graphRes) });
}