9 janvier 2017

Article

Technologies de l'information

Utiliser le caching d’ASP.net pour améliorer la performance d’un site Web

Une méthode simple, rapide et efficace d’améliorer les performances de nos sites Web ASP.Net est d’utiliser le caching.

Qu’est-ce que le « caching » ?

Le caching est une technique qui permet d’emmagasiner en mémoire de l’information utilisée fréquemment afin d’éviter de régénérer ces mêmes données ultérieurement.

Le caching est particulièrement important pour des données provenant de requêtes faites à une source de données, car les accès à la base de données sont généralement très coûteux en termes de temps de réponse. Cependant, nous pouvons tout aussi bien conserver dans le cache des données provenant d’un service Web, ou toute autre information générée par l’application Web et pouvant être utilisée dans différentes pages du site Web.

Techniques et exemples de caching dans ASP.NET

Le runtime ASP.NET contient un objet de type clé-valeur pour le cache. On y accède à l’aide de la propriété Cache de l’objet HttpContext. La clé est une chaîne de caractères alors que la valeur est un type Object.

Lecture de données dans le cache

Récupérer des valeurs dans le cache se fait simplement à l’aide du nom de la clé comme dans l’exemple suivant :

Image_article_catching_ASP.NET_1

Les valeurs dans le cache sont toutes de type objet, alors il ne faudra pas oublier de les convertir dans le bon type avant de les utiliser! Attention, si la clé n’existe pas ou si elle est expirée, la valeur null (ou nothing en VB) sera retournée.

Mise en cache de données

Afin d’insérer des données dans le cache, nous utilisons la méthode Insert. Cette méthode contient les cinq signatures suivantes :

Image_article_catching_ASP.NET_2

Explication des différents paramètres :

    • key : la clé en cache. 
    • value : l’objet à insérer dans le cache.
    • dependencies : la dépendance pour l’objet inséré dans le cache. Lorsque cette dépendance change, l’objet devient invalide et est retiré du cache.
    • absoluteExpiration : permet de spécifier l’heure à laquelle l’objet expire et est retiré du cache. Lorsque l’expiration absolue est utilisée, le paramètre pour le slidingExpiration doit avoir la valeur NoSlidingExpiration.
    • slidingExpiration : représente l’intervalle de temps qui doit s’écouler entre le dernier accès au cache et l’heure à laquelle l’objet expire. Lorsque l’expiration par intervalle de temps est utilisée, le paramètre slidingExpiration doit avoir la valeur NoAbsoluteExpiration.
    • priority : représente la priorité de l’objet par rapport aux autres valeurs dans le cache. Lorsque nécessaire, les objets dont la priorité est moins importante seront enlevés en premier.
    • onRemoveCallback : un délégué qui sera exécuté lorsqu’un item est enlevé du cache.

Voyons maintenant quelques exemples d’insertion de données dans le cache.

Utilisation de l’expiration absolue

C’est fort possiblement le type d’expiration du cache le plus simple à utiliser. La valeur mise en cache expire à une heure précise, peu importe si la donnée en est lue ou non du cache. Voici un exemple de mise en cache avec une expiration absolue :

Image_article_catching_ASP.NET_3

Utilisation de l’intervalle de temps

L’expiration par intervalle de temps est un autre exemple tout aussi simple et efficace de mise en cache. Ce type d’expiration fait en sorte que la donnée en cache sera expirée après un certain délai à partir duquel la donnée a été lue la dernière fois. 

Image_article_catching_ASP.NET_4

Dépendance sur un fichier

Dans certaines situations, nous allons peut-être vouloir créer une dépendance sur un fichier plutôt que sur un intervalle de temps. Ainsi, dès que le fichier est modifié, le cache sera expiré. 

Image_article_catching_ASP.NET_5

Dépendance personnalisée

Une autre possibilité est de créer notre propre dépendance. Il suffit de créer une nouvelle classe qui hérite de la classe CacheDependency comme dans l’exemple suivant :

Image_article_catching_ASP.NET_6

Dans cet exemple, nous avons créé la classe SelfExpiringData qui hérite de la classe CacheDependency. Cette classe ne contient qu’une seule propriété de type générique, Value qui contient en réalité la valeur à retourner. Lors de chaque lecture, si nous avons atteint la limite de 5 lectures, la méthode NotifyDependencyCache de la classe CacheDependency est exécutée. Cette méthode permet de notifier la classe de base CacheDependency que la dépendance a changé, et ainsi, la donnée sera retirée du cache.

Maintenant, il ne reste plus qu’à utiliser notre dépendance personnalisée comme suit :

Image_article_catching_ASP.NET_7

Les avantages de mettre en place le caching

Le caching dans ASP.NET ne requiert aucune configuration sur le serveur Web et ne demande aucune gestion particulière de la mémoire et des ressources serveur. Aussitôt que le serveur a besoin de plus de ressources, les informations dans le cache seront libérées, et ce, même si elles ne sont pas expirées. Si c’est aussi simple, alors pourquoi s’en priver!

Pour en apprendre davantage sur le caching et voir d’autres techniques permettant d’améliorer les performances de vos sites Web ASP.NET, je vous invite à suivre les prochaines diffusions des formations "Programmation avancée ASP.NET (MN406)" et "ASP.NET MVC : Optimisation et notions avancées (MN310)" chez Technologia.

Bruno Pelletier est formateur chez Technologia depuis 2008 dans les technologies Web de Microsoft, telles qu’ASP.NET, ASP.NET MVC et Silverlight. Détenteur de la certification de développeur Web de Microsoft, il combine son large champ de compétences techniques aux technologies Microsoft, dont C#, VB, LINQ et Entity Framework, pour développer des solutions qui respectent non seulement les principes et les concepts ayant fait leurs preuves, mais aussi les plus hauts standards de l’industrie.