TurboGears - Cache
Para aprimorar o desempenho de um aplicativo da web, especialmente se estiver envolvido em operações demoradas, são utilizadas técnicas de cache. TurboGears oferece dois tipos de técnicas de cache -
Whole-page Caching
Ele funciona no nível do protocolo HTTP para evitar solicitações inteiras ao servidor, fazendo com que o navegador do usuário ou um servidor proxy intermediário (como o Squid) intercepte a solicitação e retorne uma cópia em cache do arquivo.
Application-level Caching
Isso funciona dentro do servidor de aplicativos para armazenar em cache os valores calculados, geralmente os resultados de consultas complexas de banco de dados, para que solicitações futuras possam evitar a necessidade de recalcular os valores. Para aplicativos da web, o armazenamento em cache no nível do aplicativo fornece uma maneira flexível de armazenar em cache os resultados de consultas complexas, de modo que a carga total de um determinado método do controlador possa ser reduzida a algumas consultas específicas do usuário ou do caso e a sobrecarga de renderização de um modelo .
Cache em nível de aplicativo
Como mencionado anteriormente, o projeto TurboGears de 'início rápido' é configurado para habilitar o pacote Beaker para suporte de cache. O copo suporta os seguintes back-ends usados para armazenamento em cache -
memory- Usado para armazenamento por processo. É extremamente rápido.
filesystem - armazenamento por processo, bem como multi-processo.
DBM database - por processo, multiprocesso, bastante rápido.
SQLAlchemy database- armazenamento por servidor de banco de dados. Mais lento em comparação com as opções fornecidas acima.
Memcached - cache baseado em memória multi-servidor.
Cache de controlador
Para armazenamento em cache do controlador rápido, um cached()decorador está disponível. Todo o corpo do controlador é armazenado em cache dependendo de vários parâmetros da solicitação. A definição detg.decorators.cached() decorador é o seguinte
tg.decorators.cached(key, expire, type,
query-args, cache_headers, invalidate_on_startup, cache_response)
A descrição dos parâmetros é a seguinte -
Sr. Não. | Parâmetros e descrição |
---|---|
1 | key Especifica os parâmetros do controlador usados para gerar a chave de cache. |
2 | expire Tempo em segundos antes que o cache expire. O padrão é “nunca”. |
3 | Type dbm, memória, arquivo, memcached ou nenhum. |
4 | cache_headers Uma tupla de nomes de cabeçalho indicando cabeçalhos de resposta. |
5 | invalidate_on_startup Se for True, o cache é invalidado toda vez que o aplicativo é iniciado ou reiniciado. |
6 | cache_response a resposta deve ser armazenada em cache ou não, o padrão é True. |
A seguir está um exemplo de cache de controlador -
@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
return "This is a cached controller!"
Cache de nível de modelo
O mecanismo de modelo Genshi recupera o modelo de um cache se seu conteúdo não tiver mudado. O tamanho padrão desse cache é 25. Por padrão, o recarregamento automático de modelos é verdadeiro. Para melhorar o desempenho, as seguintes configurações podem ser feitas emapp_cfg.py -
[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false
Para armazenar em cache um modelo, você só precisa retornar o tg_cache opção do controlador que renderiza o modelo em cache.
O tg_cache é um dicionário que aceita as seguintes chaves -
key - A chave do cache. Default: Nenhum.
expire - quanto tempo o cache deve permanecer ativo. Default: nunca expira
type - memória, dbm, memcached. Default: dbm.
O exemplo a seguir ilustra o cache de modelo -
@expose(hello.templates.user')
def user(self, username):
return dict(user = username, tg_cache = dict(key = user, expire = 900))