TurboGears - Mise en cache

Afin d'améliorer les performances d'une application Web, en particulier si elle est impliquée dans de longues opérations, des techniques de mise en cache sont utilisées. TurboGears propose deux types de techniques de mise en cache -

Whole-page Caching

Il fonctionne au niveau du protocole HTTP pour éviter des requêtes entières au serveur en demandant au navigateur de l'utilisateur ou à un serveur proxy intermédiaire (tel que Squid) d'intercepter la requête et de renvoyer une copie en cache du fichier.

Application-level Caching

Cela fonctionne dans le serveur d'applications pour mettre en cache les valeurs calculées, souvent les résultats de requêtes de base de données complexes, afin que les demandes futures puissent éviter d'avoir à recalculer les valeurs. Pour les applications Web, la mise en cache au niveau de l'application offre un moyen flexible de mettre en cache les résultats de requêtes complexes afin que la charge totale d'une méthode de contrôleur donnée puisse être réduite à quelques requêtes spécifiques à l'utilisateur ou au cas et à la surcharge de rendu d'un modèle. .

Mise en cache au niveau de l'application

Comme mentionné précédemment, le projet TurboGears à démarrage rapide est configuré pour activer le package Beaker pour la prise en charge de la mise en cache. Beaker prend en charge les back-ends suivants utilisés pour le stockage du cache -

  • memory- Utilisé pour le stockage par processus. C'est extrêmement rapide.

  • filesystem - stockage par processus ainsi que multi-processus.

  • DBM database - par processus, multi-processus, assez rapide.

  • SQLAlchemy database- stockage par serveur de base de données. Plus lent que les options données ci-dessus.

  • Memcached - cache basé sur la mémoire multi-serveur.

Mise en cache du contrôleur

Pour une mise en cache rapide du contrôleur, un cached()le décorateur est disponible. L'ensemble du corps du contrôleur est mis en cache en fonction de divers paramètres de demande. La définition detg.decorators.cached() le décorateur est comme suit

tg.decorators.cached(key, expire, type, 
   query-args, cache_headers, invalidate_on_startup, cache_response)

La description des paramètres est la suivante -

N ° Sr. Paramètres et description
1

key

Spécifie les paramètres du contrôleur utilisés pour générer la clé de cache.

2

expire

Temps en secondes avant l'expiration du cache, valeur par défaut «jamais».

3

Type

dbm, mémoire, fichier, memcached ou aucun.

4

cache_headers

Un tuple de noms d'en-tête indiquant les en-têtes de réponse.

5

invalidate_on_startup

Si True, le cache est invalidé chaque fois que l'application démarre ou est redémarrée.

6

cache_response

La réponse doit être mise en cache ou non, la valeur par défaut est True.

Voici un exemple de mise en cache du contrôleur -

@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
   return "This is a cached controller!"

Mise en cache au niveau du modèle

Le moteur de modèle Genshi récupère le modèle d'un cache si son contenu n'a pas changé. La taille par défaut de ce cache est de 25. Par défaut, le rechargement automatique des modèles est vrai. Afin d'améliorer les performances, les paramètres suivants peuvent être définis dansapp_cfg.py -

[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false

Pour mettre en cache un modèle, il vous suffit de renvoyer le tg_cache option du contrôleur qui rend le modèle mis en cache.

Le tg_cache est un dictionnaire qui accepte les clés suivantes -

  • key - La clé de cache. Default: Aucun.

  • expire - combien de temps le cache doit rester en vie. Default: n'expire jamais

  • type - mémoire, dbm, memcached. Default: dbm.

L'exemple suivant illustre la mise en cache des modèles -

@expose(hello.templates.user')
def user(self, username):
   return dict(user = username, tg_cache = dict(key = user, expire = 900))