Magazine High tech

[ASP.NET MVC] Nouveautés MVC 3 Part 8 - Amélioration du cache de sortie

Publié le 21 février 2011 par Nicolasesprit

[ASP.NET MVC] Nouveautés MVC 3 Part 8 - Amélioration du cache de sortieLe cache de sortie est une fonctionnalité de la plateforme ASP.NET qui existe depuis la version 1.0. Le principe est simple, à savoir qu'une page ASP.NET va mettre en cache tout ou partie du code HTML généré par une page Web, ce qui permettra d'accélérer les accès ultérieurs à la page, en diminuant le temps de rendu.

Ce billet fait suite à la série sur les nouveautés d'ASP.NET MVC 3 écrit conjointement avec Philippe Viallate. Vous pouvez consulter les précédents billets :

  • [ASP.NET MVC] Nouveautés MVC 3 Part 1 - Améliorations dans Visual Studio 2010
  • [ASP.NET MVC] Nouveautés MVC 3 Part 2 - Améliorations pour la Validation
  • [ASP.NET MVC] Nouveautés MVC 3 Part 3 - Global Action FIlters
  • [ASP.NET MVC] Nouveautés MVC 3 Part 4 - Meilleur support de l'injection de dépendances
  • [ASP.NET MVC] Nouveautés MVC 3 Part 5 - Meilleur gestion de la génération et du rendu HTML
  • [ASP.NET MVC] Nouveautés MVC 3 Part 6 - Modifications dans les types d'Action Result
  • [ASP.NET MVC] Nouveautés MVC 3 Part 7 - Meilleur support JavaScript et Ajax

Cette fonctionnalité était bien entendu disponible dans les versions antérieures du Framework MVC, grâce à l'attribut OutputCache, mais avec une limitation non négligeable. En effet, elle est basée sur la philosophie de rendu spécifique de Web Forms, et, en conséquence, embarquait les limitations suivantes :

  • pas de cache partiel possible : en effet, le cache de sortie cachant des contrôles serveur, qui ne sont (normalement) pas utilisés en MVC, il fallait se résoudre à soit cacher l'ensemble de la page, soit ne rien cacher du tout ;
  • contournement des filtres d'action : l'attribut OutputCache étant appelé en tout début de cycle de vie, il contournait la plupart des filtres d'action, ce qui pouvait produire des comportements non voulus.

Avec la version 3, il est désormais possible de cacher le résultat d'actions appelées par RenderAction depuis la page principale. Par exemple, supposons que nous voulions afficher à un utilisateur une zone lui souhaitant la bienvenue. Pour cela, on va commencer par créer, dans le répertoire Share, une nouvelle vue Meteo.cshtml:

<h2>Meteo</h2>
Dans la ville de @ViewBag.Ville, il fait @ViewBag.Temperature degrés.
<br />
<img src="@ViewBag.ImgSource" alt="Alternate Text" />

On va ensuite ajouter, dans notre contrôleur HomeController, une Action spécifique Meteo (en admettant qu'on ait une fonction GetCurrentMeteo, qui, pour une zone géographique, renvoie un objet météo) :

[ChildActionOnly]
public ActionResult Meteo(int zoneGeographique)
{
var meteo = GetCurrentMeteo(zoneGeographique);
ViewBag.Ville = meteo.Ville;
ViewBag.Temperature= meteo.Temperature;
ViewBag.ImgSource = meteo.ImgSource;

return PartialView();
}

Et, dans la page d'accueil, on va afficher cette page de météo de la façon suivante (en admettant qu'on ait mis dans le ViewBag la zone géographique de l'utilisateur) :

@{Html.RenderAction("Meteo", "Home", new { zoneGeographique = ViewBag.zoneGeographique });}

Finalement, on va activer le cache de sortie. Il nous suffira pour cela, dans le contrôleur, d'ajouter l'attribut OutputCache sur l'action Meteo, de le configurer pour varier par Zone, avec une expiration à 60 secondes, de la façon suivante :

[ChildActionOnly]
[OutputCache(Duration=60)]
public ActionResult Meteo(int zoneGeographique)
{

Et pendant la prochaine minute, aucun appel ne sera fait à Meteo.

On a aussi la possibilité de lier le rafraichissement des données au paramètre passé à l'action de la façon suivante :

[ChildActionOnly]
[OutputCache(Duration=600, VaryByParam = "zoneGeographique")]
public ActionResult Meteo(int zoneGeographique)
{

Le code ci-dessus permettra de ne rafraichir la vue qu'une fois toutes les 10 minutes, ou au changement de zone géographique.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Nicolasesprit 16 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog