Hayadi's Blog

mardi, février 07, 2006

Accélérer le chargement de ses pages web grâce au cache

L'objet Cache

Si vous disposez d'un site dynamique utilisant fréquemment l'accès à une base de données, il devient vite intéressant de stocker vos données dans un objet cache et ainsi accélérer le chargement du site côté client et ne pas surcharger le serveur d'hébergement.Les données mises en cache sont donc plutôt les données généralement utilisées pour de l'affichage et ne nécessitant pas un rafraîchissement en temps réel à chaque connection d'un utilisateur.*Au lieu de répéter les mêmes requêtes et provoquer des connections répétées, il est plus judicieux de placer certaines données dans un cache*

Utilisation

Une propriété du cache permet d'inscrire ces données un certains temps en mémoire et éviter d'effectuer à nouveau un accès à votre base. Lorsque ce temps est échu, le cache se vide et un traitement permettra de le recharger.Tous les objets du Framework pouvant contenir des données peuvent être stockés dans ce cache.Chaque objet cache à un nom d'accès ex : Cache["RSS_plus"] et une durée de stockage. Afin de lire les données du cache, il suffit d'appeler l'objet en indiquant le nom d'accès. Ici « RSS_plus ».Il est important de bien spécifier le type à récupérer afin de le transférer dans l'objet récepteur. Ceci s'effectue en précisant entre parenthèses devant le cache le type d'objet récepteur.

System.Xml.XmlDataDocument source =(XmlDataDocument)Cache["RSS_plus"];
Ou
DataSet DataNews=(DataSet)Cache["news"];

Nous verrons ci-dessous un exemple en C# avec XmlDataDocument et un Dataset.NB : Si vous voulez retranscrire cet exemple en VB.NET, la notation du cache est différente. On devra remplacer les [] par des () lors de l'utilisation du cache.

Exemple

Exemple1 : l'objet XmlDataDocument
Ici nous allons récupérer des données Xml, plus précisément des données au format RSS et les mettre dans notre cache 15 minutes.Nous accélérerons d'une part le chargement de notre page et de plus, nous soulagerons le serveur ou nous récupérons ce flux.
try
{ //news speedloop.org
//On remplit la source de donnes avec le cache
System.Xml.XmlDataDocument source=(XmlDataDocument)Cache["RSS_plus"];
//Si le cache est vide, la source est vide
if (source==null)
{
System.Net.WebRequest webrequest =
System.Net.WebRequest.Create("http://www.speedloop.org/RSS/RSS.aspx");
webrequest.Timeout=5000;

XmlTextReader reader =
new System.Xml.XmlTextReader(webrequest.GetResponse().GetResponseStream());
source = new System.Xml.XmlDataDocument();
source.Load(reader);

//Nouveau cache des donnes avec une duree de 15 minutes
Cache.Insert("RSS_plus",source,null,DateTime.Now.AddMinutes(15),TimeSpan.Zero);
}

//Remplissage de RssXml
RssXml.Document = source;

//Application dune transformation XSL
RssXml.TransformSource = "news_forum.xslt";
}
catch(Exception ex){//traitement}

Exemple2 :

l'objet DataSet// Mise du cache dans le DataSet
DataSet DataNews=(DataSet)Cache["news"];
if (DataNews==null)
{
try
{
//Liste_News() renvoie un DataSet
DataNews=Components.News.Liste_News();
//Inscription dans le cache pour 1 heure
Cache.Insert("news",DataNews,null,DateTime.Now.AddMinutes(60),TimeSpan.Zero);
}
catch(Exception es){//traitement};
}
//Affichage dans un repeater
Repeater1.DataSource=DataNews;
Repeater1.DataBind();

Conclusion


L'utilisation du cache est particulièrement adaptée dans le cas de la récupération fréquente de flux RSS. Les contributeurs du flux vous remercieront certainement de ne pas surcharger leur serveur.Bon cache !