Mise en cache Graph Shared Computer Toolkit Microsoft
L’Graph Shared Computer Toolkit Microsoft prend en charge la mise en cache de certains appels API Graph Microsoft. Les appels sont mis en cache par entité, par exemple les personnes, les contacts, les photos. Cela permet à un composant de récupérer les données et d’autres composants de les réutiliser sans appeler Microsoft Graph.
Conseil
Pour plus d’informations sur les entités mises en cache par chaque composant, voir la documentation du composant.
Les bases de données créées par mgt pour la mise en cache sont précédées du préfixe mgt-
. Les données de chaque entité sont stockées dans un magasin d’objets distinct. Pour inspecter le cache, utilisez l’onglet Application dans le panneau développeur (outils F12) : sous la section Stockage, cliquez sur l’onglet IndexedDB.
Configuration du cache
Vous pouvez lire et écrire les options de cache via l’objet de classe CacheService.config
statique. Il est formaté comme indiqué.
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
}
};
Les périodes d’invalidation de cache individuelles null
sont par défaut dans l’objet de config et defaultInvalidationPeriod
la valeur générale par défaut est 3 600 000 ms (60 minutes). N’importe quelle valeur passée dans config.x.invalidationPeriod
remplacera defaultInvalidationPeriod
.
Le magasin de présence est la seule exception et a une valeur par défaut de 300 000 ms, soit 5 minutes.
Exemples
Pour désactiver individuellement un magasin, isEnabled
définissez simplement la valeur des propriétés de la config de ce magasin sur false :
import { CacheService } from '@microsoft/mgt';
CacheService.config.users.isEnabled = false;
La désactivation du cache n’effacera pas le cache.
La modification de la période d’invalidation est similaire :
import { CacheService } from '@microsoft/mgt';
CacheService.config.users.invalidationPeriod = 1800000;
Effacement du cache
Le cache est automatiquement effacé lorsque l’utilisateur se dénexe. Il peut également être effacé manuellement.
Plus vous effacerez tous les magasins dans le cache, clearCaches()
CacheService
plus la méthode de la classe effacera toutes les magasins conservées par CacheService.
import { CacheService } from '@microsoft/mgt';
CacheService.clearCaches();
Création de vos propres magasins de cache
Si vous souhaitez créer et remplir vos propres magasins de cache pour vos composants personnalisés, vous pouvez utiliser la CacheService
classe statique.
CacheService.getCache(schema: CacheSchema, storeName: String);
Remarque : Le
storeName
référencement dans l’appel doitgetCache()
correspondre à l’un des magasins répertoriés dans votreCacheSchema
objet.
L’objet CacheSchema
est un dictionnaire avec les paires clé/valeur.
import { CacheSchema } from '@microsoft/mgt';
const cacheSchema: CacheSchema = {
name: string,
stores: {
store1: {},
store2: {},
...
},
version: number
};
L’exemple suivant illustre l’implémentation du cache.
import { CacheItem, CacheSchema, CacheService, CacheStore } from '@microsoft/mgt';
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) });
}
Commentaires
Envoyer et afficher des commentaires pour