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))