févr. 18 2010

[ASP.NET 4] Extensible Output Caching

Category: ASP.NET | ASP.NET 4Nicolas Esprit @ 00:02

Output Caching depuis ASP.NET 1.0

Depuis la sortie de la version 1.0 d'ASP.NET, la mise en cache a permis aux développeurs de stocker les pages, les contrôles et les réponses HTTP en mémoire. Lors des requêtes web ultérieures, ASP.NET peut alors fournir le contenu plus rapidement via la récupération des fichiers de sortie en mémoire au lieu de regénérer la page à produire. Toutefois, cette approche a une limitation : le contenu généré doit toujours être stocké en mémoire, et sur des serveurs connaisant une utilisation intense, la mémoire consommée par la mise en cache peut entrer en concurrence avec les demandes mémoire des autres portions de l'application Web.

Extensible Output Caching avec ASP.NET 4.0

ASP.NET 4.0 ajoute un point d'extensibilité pour la mise en cache qui permet de configurer un ou plusieurs providers de cache personnalisés. Ces providers peuvent utiliser n'importe quel mécanisme de stockage pour persister le contenu HTML. Il est ainsi possible de créer un provider pour les mécanismes de persistance diverses, qui peuvent inclure des disques locaux ou distants, le stockage sur le Cloud, ou encore les moteurs de cache distribués.


Il faut créer un provider de cache customisé en dérivant de ce nouveau type : System.Web.Caching.OutputCacheProvider. Vous pouvez ensuite configurer le provider dans le fichier Web.config à l'aide de la sous-section de l'élément OutputCache, comme le montre l'exemple suivant :

   1: <caching>
   2:   <outputCache defaultProvider="AspNetInternalProvider">
   3:     <providers>
   4:       <add name="FileCache" type="NE.Utils.Caching.FileOutputCacheProvider, FileOutputCacheProvider"/>
   5:     </providers>
   6:   </outputCache>
   7: </caching>

Par défaut dans ASP.NET 4.0, toutes les réponses HTTP, ainsi que le rendu des pages et des contrôles utilisent le cache, comme le montre l'exemple précédent, où l'attribut defaultProvider est réglé sur AspNetInternalProvider. Vous pouvez changer la sortie par défaut du provider de cache utilisé pour une application Web en spécifiant un nom de provider différent pour defaultProvider.


En outre, vous pouvez sélectionnez la sortie de différents fournisseurs de mémoire cache par contrôle et par requête. La meilleure façon de choisir un provider de cache spécifique à un contrôle Web est de le faire de façon déclarative en utilisant le nouvel attribut providerName dans le markup du contrôle ou de la page en question, comme le montre l'exemple suivant:

<% @ OutputCache Duration="60" VaryByParam="None" providerName="FileOutputCacheProvider" %>

Spécifier un autre provider de cache de sortie pour une requête HTTP nécessite un peu plus de travail. Au lieu de spécifier de manière déclarative le provider, vous devez redéfinir la nouvelle méthode GetOuputCacheProviderName dans le fichier Global.asax pour spécifier dynamiquement le provider à utiliser pour une demande spécifique, comme illustré dans l'exemple de code suivant :

public override string GetOutputCacheProviderName (HttpContext context)
(
if (context.Request.Path.EndsWith ("Advanced.aspx"))
return "FileOutputCacheProvider";
else
return base.GetOutputCacheProviderName(context);
)

Avec l'ajout de l'extensibilité pour la mise de cache de sortie à ASP.NET 4, vous pouvez maintenant définir une stratégie de mise en cache plus intelligente et plus performante pour vos applications Web. Par exemple, il est maintenant possible de mettre en cache le "Top 10" des pages d'un site dans la mémoire, tandis que la mise en cache des pages à faible trafic le seront sur le disque. 

J'en profite au passage pour vous parler de ce billet intéressant concernant une méthode pour faire varier le cache en fonction du browser : Blog de Cyril Durand.

Tags: , , ,

Les commentaires sont clos