TurboGears - Almacenamiento en caché

Para mejorar el rendimiento de una aplicación web, especialmente si está involucrada en operaciones prolongadas, se utilizan técnicas de almacenamiento en caché. TurboGears proporciona dos tipos de técnicas de almacenamiento en caché:

Whole-page Caching

Funciona a nivel de protocolo HTTP para evitar solicitudes completas al servidor haciendo que el navegador del usuario o un servidor proxy intermedio (como Squid) intercepte la solicitud y devuelva una copia en caché del archivo.

Application-level Caching

Esto funciona dentro del servidor de aplicaciones para almacenar en caché los valores calculados, a menudo los resultados de consultas complejas de la base de datos, de modo que las solicitudes futuras puedan evitar tener que volver a calcular los valores. Para las aplicaciones web, el almacenamiento en caché a nivel de aplicación proporciona una forma flexible de almacenar en caché los resultados de consultas complejas para que la carga total de un método de controlador dado se pueda reducir a unas pocas consultas específicas del usuario o del caso y la sobrecarga de procesamiento de una plantilla .

Almacenamiento en caché a nivel de aplicación

Como se mencionó anteriormente, el proyecto TurboGears 'de inicio rápido' está configurado para habilitar el paquete Beaker para la compatibilidad con el almacenamiento en caché. Beaker admite los siguientes back-end utilizados para el almacenamiento en caché:

  • memory- Utilizado para almacenamiento por proceso. Es extremadamente rápido.

  • filesystem - almacenamiento por proceso y multiproceso.

  • DBM database - por proceso, multiproceso, bastante rápido.

  • SQLAlchemy database- almacenamiento por servidor de base de datos. Más lento en comparación con las opciones dadas anteriormente.

  • Memcached - Caché basado en memoria de múltiples servidores.

Almacenamiento en caché del controlador

Para un almacenamiento en caché rápido del controlador, cached()decorador está disponible. Todo el cuerpo del controlador se almacena en caché en función de varios parámetros de solicitud. La definición detg.decorators.cached() decorador es el siguiente

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

La descripción de los parámetros es la siguiente:

No Señor. Parámetros y descripción
1

key

Especifica los parámetros del controlador usados ​​para generar la clave de caché.

2

expire

Tiempo en segundos antes de que expire la caché, el valor predeterminado es "nunca".

3

Type

dbm, memoria, archivo, memcached o Ninguno.

4

cache_headers

Una tupla de nombres de encabezados que indican encabezados de respuesta.

5

invalidate_on_startup

Si es Verdadero, la caché se invalida cada vez que se inicia o se reinicia la aplicación.

6

cache_response

la respuesta debe almacenarse en caché o no, el valor predeterminado es True.

A continuación se muestra un ejemplo de almacenamiento en caché del controlador:

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

Almacenamiento en caché de nivel de plantilla

El motor de plantillas de Genshi recupera la plantilla de un caché si su contenido no ha cambiado. El tamaño predeterminado de esta caché es 25. De forma predeterminada, la recarga automática de plantillas es verdadera. Para mejorar el rendimiento, se pueden realizar los siguientes ajustes enapp_cfg.py -

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

Para almacenar en caché una plantilla, solo tiene que devolver el tg_cache opción del controlador que procesa la plantilla en caché.

El tg_cache es un diccionario que acepta las siguientes claves:

  • key - La clave de caché. Default: Ninguna.

  • expire - cuánto tiempo debe permanecer vivo el caché. Default: nunca expira

  • type - memoria, dbm, memcached. Default: dbm.

El siguiente ejemplo ilustra el almacenamiento en caché de plantillas:

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