Tag Helper Cache dans ASP.NET Core MVC
Par Peter Kellner
Le Tag Helper Cache permet d’améliorer les performances de votre application ASP.NET Core en mettant en cache son contenu dans le fournisseur de caches ASP.NET Core interne.
Pour obtenir une vue d’ensemble des Tag Helpers, consultez Tag Helpers dans ASP.NET Core.
La balise Razor suivante met en cache la date actuelle :
<cache>@DateTime.Now</cache>
La première requête à la page qui contient le Tag Helper affiche la date actuelle. Les autres requêtes affichent la valeur mise en cache jusqu’à ce que le cache expire (par défaut, 20 minutes) ou jusqu’à ce que la date du cache soit supprimée du cache.
Attributs de Tag Helper Cache
enabled
Type d’attribut | Exemples | Default |
---|---|---|
Booléen | true , false |
true |
enabled
détermine si le contenu joint par le Tag Helper Cache est mis en cache. Par défaut, il s’agit de true
. Si la valeur est false
, la sortie rendue n’est pas mise en cache.
Exemple :
<cache enabled="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-on
Type d’attribut | Exemple |
---|---|
DateTimeOffset |
@new DateTime(2025,1,29,17,02,0) |
expires-on
définit une date d’expiration absolue pour l’élément mis en cache.
L’exemple suivant met en cache le contenu du Tag Helper Cache jusqu’à 17:02 le 29 janvier 2025 :
<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-after
Type d’attribut | Exemple | Default |
---|---|---|
TimeSpan |
@TimeSpan.FromSeconds(120) |
20 minutes |
expires-after
définit la durée à partir de l’heure de la première demande pour mettre en cache le contenu.
Exemple :
<cache expires-after="@TimeSpan.FromSeconds(120)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Le moteur d’affichage Razor définit la valeur expires-after
par défaut sur vingt minutes.
expires-sliding
Type d’attribut | Exemple |
---|---|
TimeSpan |
@TimeSpan.FromSeconds(60) |
Définit l’heure à laquelle une entrée de cache doit être supprimée si sa valeur n’a fait l’objet d’aucun accès.
Exemple :
<cache expires-sliding="@TimeSpan.FromSeconds(60)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-header
Type d’attribut | Exemples |
---|---|
String | User-Agent , User-Agent,content-encoding |
vary-by-header
accepte une liste séparée par des virgules de valeurs d’en-tête qui déclenchent une actualisation du cache quand elles changent.
L’exemple suivant analyse la valeur d’en-tête User-Agent
. L’exemple met en cache le contenu de chaque valeur User-Agent
différente présentée au serveur web :
<cache vary-by-header="User-Agent">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-query
Type d’attribut | Exemples |
---|---|
String | Make , Make,Model |
vary-by-query
accepte une liste de Keys séparées par des virgules dans une chaîne de requête (Query) déclenchant une actualisation du cache quand la valeur de l’une des clés répertoriées est modifiée.
L’exemple suivant analyse les valeurs de Make
et Model
. L’exemple met en cache le contenu de chaque valeur Make
et Model
différente présentée au serveur web :
<cache vary-by-query="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-route
Type d’attribut | Exemples |
---|---|
String | Make , Make,Model |
vary-by-route
accepte une liste séparée par des virgules de noms de paramètre de route qui déclenchent une actualisation du cache quand la valeur du paramètre des données de route change.
Exemple :
Startup.cs
:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");
Index.cshtml
:
<cache vary-by-route="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-cookie
Type d’attribut | Exemples |
---|---|
String | .AspNetCore.Identity.Application , .AspNetCore.Identity.Application,HairColor |
vary-by-cookie
accepte une liste de noms (séparés par des virgules) de cookie qui déclenchent une actualisation du cache quand la valeur cookie change.
L’exemple suivant analyse le cookie associé à ASP.NET Core Identity. Lorsqu’un utilisateur est authentifié, une modification dans le Identitycookie déclenche une actualisation du cache :
<cache vary-by-cookie=".AspNetCore.Identity.Application">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-user
Type d’attribut | Exemples | Default |
---|---|---|
Booléen | true , false |
true |
vary-by-user
spécifie si le cache se réinitialise ou pas quand l’utilisateur connecté (ou principal du contexte) change. L’utilisateur actuel est également connu comme principal du contexte de la demande et peut être affiché dans une vue Razor en référençant @User.Identity.Name
.
L’exemple suivant analyse l’utilisateur actuellement connecté pour déclencher une actualisation du cache :
<cache vary-by-user="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
L’utilisation de cet attribut permet de conserver le contenu dans le cache lors d’un cycle de connexion et de déconnexion. Lorsque la valeur est définie sur true
, un cycle d’authentification invalide le cache pour l’utilisateur authentifié. Le cache est invalidé, car une nouvelle valeur unique de cookie est générée quand un utilisateur est authentifié. Le cache est conservé pour l’état anonyme lorsqu’aucun cookien’est présent ou quand le cookie a expiré. Si l’utilisateur n’est pas authentifié, le cache est conservé.
vary-by
Type d’attribut | Exemple |
---|---|
String | @Model |
vary-by
permet la personnalisation des données mises en cache. Quand l’objet référencé par la valeur de la chaîne de l’attribut change, le contenu du Tag Helper Cache est mis à jour. Souvent, une concaténation de chaîne des valeurs de modèle est affectée à cet attribut. En effet, cela entraîne un scénario où une mise à jour de l’une des valeurs concaténées invalide le cache.
L’exemple suivant suppose que la méthode de contrôleur restituant la vue additionne la valeur entière des deux paramètres de routage, myParam1
et myParam2
, et retourne la somme en tant que propriété de modèle unique. Quand cette somme est modifiée, le contenu du Tag Helper Cache est rendu et mis en cache à nouveau.
Action :
public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
int num1;
int num2;
int.TryParse(myParam1, out num1);
int.TryParse(myParam2, out num2);
return View(viewName, num1 + num2);
}
Index.cshtml
:
<cache vary-by="@Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
priority
Type d’attribut | Exemples | Default |
---|---|---|
CacheItemPriority |
High , Low , NeverRemove , Normal |
Normal |
priority
fournit des instructions de suppression de cache au fournisseur de caches intégré. Le serveur web supprime d’abord les entrées de cache Low
en cas de sollicitation de la mémoire.
Exemple :
<cache priority="High">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
L’attribut priority
ne garantit pas un niveau spécifique de rétention du cache. CacheItemPriority
est uniquement une suggestion. Si vous affectez à cet attribut la valeur NeverRemove
, il n’est pas garanti que les éléments du cache soient toujours conservés. Pour plus d’informations, consultez les rubriques de la section Ressources supplémentaires.
Le Tag Helper Cache dépend du service de cache en mémoire. Le Tag Helper Cache ajoute le service s’il ne l’a pas encore été.
Ressources supplémentaires
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour