Mise en cache des données dans un site pages Web ASP.NET (Razor) pour de meilleures performances

par Tom FitzMacken

Cet article explique comment utiliser une assistance pour mettre en cache des informations afin d’accélérer les performances d’un site web pages Web ASP.NET (Razor). Vous pouvez accélérer votre site web en le faisant stocker ( c’est-à-dire mettre en cache) les résultats des données qui prendrait généralement beaucoup de temps à récupérer ou à traiter et qui ne changent pas souvent.

Ce que vous allez apprendre :

  • Comment utiliser la mise en cache pour améliorer la réactivité de votre site web.

Voici les fonctionnalités ASP.NET introduites dans l’article :

  • L’assistance WebCache .

Versions logicielles utilisées dans le tutoriel

  • pages Web ASP.NET (Razor) 3

Ce tutoriel fonctionne également avec pages Web ASP.NET 2.

Chaque fois qu’une personne demande une page de votre site, le serveur web doit effectuer un travail pour répondre à la demande. Pour certaines de vos pages, le serveur peut avoir à effectuer des tâches qui prennent (comparativement) beaucoup de temps, telles que la récupération de données à partir d’une base de données. Même si ces tâches ne prennent pas de temps en termes absolus, si votre site rencontre beaucoup de trafic, toute une série de requêtes individuelles qui obligent le serveur web à effectuer la tâche compliquée ou lente peut s’ajouter à beaucoup de travail. Cela peut finalement affecter les performances du site.

Une façon d’améliorer les performances de votre site web dans des circonstances comme celle-ci consiste à mettre en cache les données. Si votre site reçoit des demandes répétées pour les mêmes informations et que les informations n’ont pas besoin d’être modifiées pour chaque personne, et qu’elles ne sont pas sensibles au temps, au lieu de les récupérer ou de les recalculer, vous pouvez extraire les données une seule fois, puis stocker les résultats. La prochaine fois qu’une demande est envoyée pour obtenir ces informations, il vous suffit de les sortir du cache.

En général, vous mettez en cache des informations qui ne changent pas fréquemment. Lorsque vous placez des informations dans le cache, elles sont stockées en mémoire sur le serveur web. Vous pouvez spécifier la durée pendant laquelle il doit être mis en cache, de secondes à jours. Lorsque la période de mise en cache expire, les informations sont automatiquement supprimées du cache.

Notes

Les entrées du cache peuvent être supprimées pour d’autres raisons que leur expiration. Par exemple, le serveur web peut temporairement manquer de mémoire, et une façon de récupérer de la mémoire consiste à lever des entrées hors du cache. Comme vous le verrez, même si vous avez placé des informations dans le cache, vous devez case activée pour être sûr qu’elles sont toujours là quand vous en avez besoin.

Imaginez que votre site web comporte une page qui affiche la température actuelle et les prévisions météorologiques. Pour obtenir ce type d’informations, vous pouvez envoyer une demande à un service externe. Étant donné que ces informations ne changent pas beaucoup (dans un délai de deux heures, par exemple) et que les appels externes nécessitent du temps et de la bande passante, il s’agit d’un bon candidat pour la mise en cache.

Ajout de la mise en cache à une page

ASP.NET inclut une WebCache assistance qui facilite l’ajout de la mise en cache à votre site et l’ajout de données au cache. Dans cette procédure, vous allez créer une page qui met en cache l’heure actuelle. Il ne s’agit pas d’un exemple réel, car l’heure actuelle est quelque chose qui change souvent, et qui de plus n’est pas complexe à calculer. Toutefois, il s’agit d’un bon moyen d’illustrer la mise en cache en action.

  1. Ajoutez une nouvelle page nommée WebCache.cshtml au site web.

  2. Ajoutez le code et le balisage suivants à la page :

    @{
        var cacheItemKey = "CachedTime";
        var cacheHit = true;
        var time = WebCache.Get(cacheItemKey);
    
        if (time == null) {
            cacheHit = false;
        }
    
        if (cacheHit == false) {
            time = @DateTime.Now;
            WebCache.Set(cacheItemKey, time, 1, false);
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>WebCache Helper Sample</title>
    </head>
    <body>
        <div>
            @if (cacheHit) {
                @:Found the time data in the cache.
            } else {
                @:Did not find the time data in the cache.
            }
        </div>
        <div>
            This page was cached at @time.
        </div>
    </body>
    </html>
    

    Lorsque vous mettez en cache des données, vous les placez dans le cache à l’aide d’un nom unique sur le site web. Dans ce cas, vous allez utiliser une entrée de cache nommée CachedTime. Il s’agit du cacheItemKey indiqué dans l’exemple de code.

    Le code lit d’abord l’entrée de CachedTime cache. Si une valeur est retournée (autrement dit, si l’entrée de cache n’est pas null), le code définit simplement la valeur de la variable de temps sur les données du cache.

    Toutefois, si l’entrée de cache n’existe pas (c’est-à-dire qu’elle est null), le code définit la valeur de temps, l’ajoute au cache et définit une valeur d’expiration sur une minute. Après une minute, l’entrée de cache est ignorée. (La valeur d’expiration par défaut d’un élément dans le cache est de 20 minutes.) La commande WebCache.Set(cacheItemKey, time, 1, false) montre comment ajouter la valeur d’heure actuelle au cache et définir son expiration sur 1 minute. La définition du paramètre slidingExpiration sur false signifie que le délai d’expiration n’est pas renouvelé chaque fois qu’il est demandé. Il expirera exactement 1 minute après son ajout initial au cache. Si vous définissez cette valeur sur true le délai d’expiration d’une minute est réinitialisé chaque fois que la valeur est demandée à partir du cache.

    Ce code illustre le modèle que vous devez toujours utiliser lorsque vous mettez en cache des données. Avant d’obtenir quelque chose dans le cache, case activée toujours d’abord si la méthode a retourné nullWebCache.Get. N’oubliez pas que l’entrée du cache a peut-être expiré ou a peut-être été supprimée pour une autre raison. Il n’est donc jamais garanti qu’une entrée donnée se trouve dans le cache.

  3. Exécutez WebCache.cshtml dans un navigateur. (Vérifiez que la page est sélectionnée dans l’espace de travail Fichiers avant de l’exécuter.) La première fois que vous demandez la page, les données d’heure ne sont pas dans le cache et le code doit ajouter la valeur de temps au cache.

    cache-1

  4. Actualisez WebCache.cshtml dans le navigateur. Cette fois, les données d’heure sont dans le cache. Notez que l’heure n’a pas changé depuis la dernière fois que vous avez consulté la page.

    cache-2

  5. Attendez une minute que le cache soit vidé, puis actualisez la page. La page indique à nouveau que les données d’heure n’ont pas été trouvées dans le cache et que l’heure mise à jour est ajoutée au cache.

Ressources supplémentaires