La mise en cache est une technologie qui stocke les données/informations fréquemment utilisées en mémoire afin que la prochaine fois que les mêmes données/informations seront nécessaires, elles puissent être récupérées directement de la mémoire au lieu d'être générées à nouveau à partir de l'application.
La mise en cache est très importante pour améliorer les performances ASP, car les pages et les contrôles ASP sont générés dynamiquement. Ceci est extrêmement important pour les données liées aux interactions, où le temps de réponse est limité.
Dans les supports auxquels il faut accéder rapidement, comme la mémoire vive d'un ordinateur, les caches stockent les données fréquemment utilisées. Le runtime ASP contient des paires clé-valeur appelées objets CLR mis en cache. Il se trouve dans l'application et est disponible via HttpContext et System.Web.UI.Page.
À certains égards, la mise en cache et le stockage des objets d'état sont similaires. Toutefois, les informations stockées dans l'objet d'état sont déterministes. Par exemple, vous pouvez calculer les données stockées dans l'objet d'état, mais les données mises en cache ne sont pas déterministes.
Les données ne sont pas disponibles dans les circonstances suivantes :
Si son cycle de vie est terminé,
Si l'application libère sa mémoire,
Si, pour une raison quelconque, le cache n'est pas remplacé.
Vous pouvez utiliser un indexeur pour accéder aux éléments du cache, et il est possible de contrôler la durée de vie des objets dans le cache et de définir la relation entre les objets mis en cache et leurs ressources physiques.
ASP fournit les différents types de cache suivants :
Cache de sortie : Le cache de sortie peut stocker une copie de la dernière page Web rendue, ou une page partielle envoyée au client. La prochaine fois que le client demande la page, une copie en cache de la page est envoyée au client au lieu de régénérer la page, ce qui permet de gagner du temps.
Mise en cache des données : la mise en cache des données fait référence à la mise en cache des données de la source de données. Tant que le cache n'a pas été remplacé, les données seront récupérées du cache lorsqu'elles seront à nouveau demandées. Lorsque le cache est remplacé, de nouvelles données sont extraites de la source de données et le cache est à nouveau rempli.
Cache d'objets : le cache d'objets consiste à mettre en cache les objets de la page, tels que les contrôles liés aux données, etc. Les données mises en cache sont placées dans la mémoire du serveur.
Mise en cache des classes : lors de la première exécution d'une page Web ou d'un service Web, les classes de page compilées sont assemblées. L'assembly est ensuite mis en cache sur le serveur. La prochaine fois que la page ou le service sera demandé, l’assembly mis en cache sera utilisé. Lorsque le code source est modifié, le CLR recompile l'assembly.
Cache de configuration : les informations de configuration de l'application sont stockées dans un fichier de configuration. Le cache de configuration stocke les informations de configuration dans la mémoire du serveur.
Dans ce didacticiel, nous examinerons la mise en cache des sorties, la mise en cache des données et la mise en cache des objets.
Le rendu d'une page peut impliquer certains processus complexes, tels que l'accès à la base de données, le rendu de contrôles complexes, etc. La mise en cache de sortie permet de contourner les allers-retours vers le serveur en mettant en cache les données en mémoire. Même la page entière peut être mise en cache.
La directive OutputCache est responsable de la mise en cache des sorties. Il permet la mise en cache des sorties et offre un certain degré de contrôle sur son comportement.
Syntaxe de la directive OutputCache :
<%@ OutputCache Duration="15" VaryByParam="Aucun" %>
Placez cette directive sous la directive page. Cela indique à l'environnement que la page doit être mise en cache pendant 15 secondes. Le gestionnaire d'événements de chargement de page suivant aidera à confirmer si la page a été mise en cache.
protected void Page_Load(object sender, EventArgs e){ Thread.Sleep(10000); Response.Write("Cette page a été générée et mise en cache à :" + DateTime.Now.ToString());}
La méthode Thread.Sleep() arrête le processus pendant une période de temps spécifique. Dans cet exemple, le fil de discussion est arrêté pendant 10 secondes, donc lorsque la page est téléchargée pour la première fois, cela prend 10 secondes. Cependant, la prochaine fois que vous actualiserez la page, cela ne prendra pas de temps car la page a déjà été récupérée du cache et ne sera pas téléchargée à nouveau.
La directive OutputCache présente les fonctionnalités suivantes lorsqu'elle aide à contrôler le comportement du cache de sortie :
propriété | valeur | décrire |
---|---|---|
DisqueCacheable | vrai/faux | Décrit si la sortie peut être écrite sur le disque avec le cache. |
Pas de magasin | vrai/faux | Décrit si l'en-tête de cache « no store » est envoyé. |
Profil de cache | Nom de la chaîne | Le nom du fichier de configuration du cache stocké dans web.config. |
VaryByParam | Aucun*Nom du paramètre | Utilisez des valeurs de chaîne séparées par des points-virgules dans les requêtes GET ou des valeurs de variables dans les requêtes POST. |
VaryByHeader | *Nom du fichier d'en-tête | Il peut s'agir d'une chaîne délimitée par des points-virgules spécifiant les en-têtes soumis par le client. |
VarierParPersonnalisé | Chaîne personnalisée du navigateur | Informez ASP.NET des modifications apportées au cache de sortie via la version du nom du navigateur ou la chaîne du client. |
Emplacement | Tout serveur de streaming de téléchargement clientAucun | Any : La page peut être mise en cache n'importe où Client : Le contenu mis en cache est contenu dans le navigateur Flux de téléchargement : Le contenu mis en cache est stocké dans le flux de téléchargement et sur le serveur Serveur : Le cache est uniquement stocké dans le serveur Aucun : Aucune mise en cache n'est autorisée. |
Durée | nombre | Nombre de secondes pendant lesquelles une page ou une opération doit être mise en cache. |
Ajoutons une zone de texte et un bouton à l'exemple précédent, et ajoutons un gestionnaire d'événements pour ce bouton.
protected void btnmagic_Click(expéditeur d'objet, EventArgs e){ Response.Write("<br><br>"); Response.Write("<h2> Bonjour, " + this.txtname.Text + "</h2>") ;}
Modifiez la directive OutputCache :
<%@ OutputCache Duration="60" VaryByParam="txtname" %>
Lorsque le programme s'exécute, ASP met en cache la page en fonction du nom indiqué dans la zone de texte.
Le principal aspect de la mise en cache des données est la mise en cache du contrôle de la source de données. Nous avons abordé les contrôles de source de données qui représentent les données d'une source de données, telle qu'une base de données ou un fichier XML. Ces contrôles sont dérivés de la classe abstraite DataSourceControl et possèdent les propriétés héritées suivantes pour la mise en cache :
Période de cache : durée pendant laquelle la source de données met les données en cache.
Politique d'expiration du cache : définit le comportement du cache lorsque les données du cache expirent.
Dépendance de la valeur du cache : définit une valeur de contrôle qui déplace automatiquement les données hors du cache lorsqu'elles expirent.
Activer la mise en cache : vous pouvez confirmer si les données sont mises en cache.
Pour démontrer la mise en cache des données, nous créons un nouveau site Web et y ajoutons un nouveau formulaire Web. Ajoutez un contrôle SqlDataSource à la base de données qui se connecte au didacticiel d'accès aux données.
Dans cet exemple, nous ajoutons une étiquette à la page qui affiche le temps de réponse de la page.
<asp:Label ID="lbltime" runat="server"></asp:Label>
En dehors de cette balise, la page entière est identique au didacticiel d'accès aux données. Ajoutez un gestionnaire d'événements à cette page pour télécharger l'heure.
protected void Page_Load (expéditeur de l'objet, EventArgs e){ lbltime.Text = String.Format("Page publiée à : {0}", DateTime.Now.ToLongTimeString());}
La page conçue devrait ressembler à ceci :
Lorsque vous exécutez la page pour la première fois, rien de différent ne se produit. Affichage de l'étiquette, chaque fois que la page est actualisée, la page sera rechargée et le changement d'heure sera affiché sur l'étiquette.
Ensuite, définissez la propriété EnableCaching du contrôle de source de données sur « true » et la propriété Cacheduration sur « 60 ». Il mettra en œuvre la mise en cache et le cache expirera toutes les 60 secondes.
Chaque fois qu'il est actualisé, l'horodatage change. Mais si vous modifiez les données du tableau dans les 60 secondes, elles ne seront affichées qu'après l'expiration du cache.
<asp:SqlDataSource ID = "SqlDataSource1" runat = "server" ConnectionString = "<%$ ConnectionStrings : ASPDotNetStepByStepConnectionString %>" ProviderName = "<%$ ConnectionStrings : ASPDotNetStepByStepConnectionString.ProviderName %>" SelectCommand = "SELECT * FROM [DotNetReferences]" EnableCaching = "vrai" CacheDuration = "60"> </asp:SqlDataSource>
La mise en cache d'objets offre une plus grande flexibilité que les autres technologies de mise en cache. Vous pouvez utiliser la mise en cache d'objets pour placer n'importe quel objet dans le cache. Les objets peuvent également être de n'importe quel type : types de données, contrôles réseau, classes, objets de paramètres de données, etc. Ces éléments peuvent être ajoutés au cache simplement en leur attribuant un nom de valeur, comme indiqué ci-dessous :
Cache["key"] = item;
Afin d'insérer des objets dans le cache, ASP fournit la méthode Insert(). Il existe quatre versions surchargées de cette méthode. Jetons un coup d'oeil :
Surcharge | décrire |
---|---|
Cache.Insert((clé, valeur); | Insérez dans le cache sous forme de paires clé-valeur, la priorité et le cycle de vie étant la valeur par défaut. |
Cache.Insert (clé, valeur, dépendances) ; | Insérez le cache dans le cache sous forme de paires clé-valeur, avec des priorités et des durées de vie par défaut, ainsi que des dépendances de cache liées à d'autres fichiers ou contenus, afin que les modifications du cache ne soient plus limitées. |
Cache.Insert (clé, valeur, dépendances, absoluExpiration, slideExpiration); | Indiquez la période de validité de la configuration ci-dessus. |
Cache.Insert (clé, valeur, dépendances, absoluExpiration, slideExpiration, priorité, onRemoveCallback) ; | Outre la configuration, il permet également de définir la priorité du contenu mis en cache et de la délégation, indiquant une méthode à appeler lorsqu'un objet est supprimé. |
Le cycle de vie dynamique est utilisé pour supprimer un élément de cache qui n'est pas valide pour une période de temps spécifiée. L'extrait de code suivant enregistre un élément de cache sans dépendance avec une durée de vie glissante de 10 minutes :
Cache.Insert("mon_élément", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));
Créez une page en utilisant simplement un bouton et une étiquette. Écrivez le code suivant dans l'événement de chargement de page :
protected void Page_Load(object sender, EventArgs e){ if (this.IsPostBack) { lblinfo.Text += "Page publiée en arrière.<br/>" } else { lblinfo.Text += "page créée.<br/> "; } if (Cache["testitem"] == null) { lblinfo.Text += "Création d'un élément de test.<br/>"; DateTime testItem = DateTime.Now; lblinfo.Text += "Stockage de l'élément de test dans le cache "; lblinfo.Text += "pendant 30 secondes.<br/>"; (30), TimeSpan.Zero); } else { lblinfo.Text += "Récupération de l'élément de test.<br/>"; = (DateTime)Cache["testitem"]; lblinfo.Text += "L'élément de test est : " + testItem.ToString(); lblinfo.Text += "<br/>" } lblinfo.Text += "<br />";}
Lorsque la page se charge pour la première fois, elle affiche :
Page créée.Création d'un élément de test.Stockage de l'élément de test dans le cache pendant 30 secondes.
Si vous cliquez à nouveau sur le bouton dans les 30 secondes, bien que la page soit supprimée, le contrôle d'étiquette obtiendra les informations du cache, comme indiqué ci-dessous :
Page publiée en arrière.Récupération de l'élément de test.L'élément de test est : 14-07-2010 01:25:04