TurboGears - Caching

Per migliorare le prestazioni di un'applicazione Web, soprattutto se è coinvolta in operazioni lunghe, vengono utilizzate tecniche di memorizzazione nella cache. TurboGears fornisce due tipi di tecniche di memorizzazione nella cache:

Whole-page Caching

Funziona a livello di protocollo HTTP per evitare intere richieste al server facendo in modo che il browser dell'utente o un server proxy intermedio (come Squid) intercetti la richiesta e restituisca una copia cache del file.

Application-level Caching

Funziona all'interno del server delle applicazioni per memorizzare nella cache i valori calcolati, spesso i risultati di query di database complesse, in modo che le richieste future possano evitare di dover ricalcolare i valori. Per le applicazioni web, la memorizzazione nella cache a livello di applicazione fornisce un modo flessibile per memorizzare nella cache i risultati di query complesse in modo che il carico totale di un determinato metodo del controller possa essere ridotto a poche query specifiche dell'utente o del caso e il sovraccarico di rendering di un modello .

Caching a livello di applicazione

Come accennato in precedenza, il progetto TurboGears "quickstarted" è configurato per abilitare il pacchetto Beaker per il supporto della cache. Beaker supporta i seguenti back-end utilizzati per l'archiviazione della cache:

  • memory- Utilizzato per l'archiviazione per processo. È estremamente veloce.

  • filesystem - archiviazione per processo e multi-processo.

  • DBM database - per processo, multi-processo, abbastanza veloce.

  • SQLAlchemy database- archiviazione per server di database. Più lento rispetto alle opzioni sopra indicate.

  • Memcached - cache basata sulla memoria multi-server.

Memorizzazione nella cache del controller

Per una rapida memorizzazione nella cache del controller, un file cached()decoratore è disponibile. L'intero corpo del controller viene memorizzato nella cache a seconda di vari parametri di richiesta. La definizione ditg.decorators.cached() decoratore è il seguente

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

La descrizione dei parametri è la seguente:

Sr.No. Parametri e descrizione
1

key

Specifica i parametri del controller utilizzati per generare la chiave della cache.

2

expire

Tempo in secondi prima che la cache scada, il valore predefinito è "mai".

3

Type

dbm, memoria, file, memcached o Nessuno.

4

cache_headers

Una tupla di nomi di intestazione che indicano le intestazioni di risposta.

5

invalidate_on_startup

Se True, la cache viene invalidata ogni volta che l'applicazione viene avviata o riavviata.

6

cache_response

la risposta deve essere memorizzata nella cache o meno, il valore predefinito è True.

Di seguito è riportato un esempio di memorizzazione nella cache del controller:

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

Caching a livello di modello

Il motore di modelli Genshi recupera il modello da una cache se il suo contenuto non è cambiato. La dimensione predefinita di questa cache è 25. Per impostazione predefinita, il ricaricamento automatico dei modelli è vero. Per migliorare le prestazioni, è possibile effettuare le seguenti impostazioni inapp_cfg.py -

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

Per memorizzare un modello nella cache, devi solo restituire il file tg_cache opzione dal controller che esegue il rendering del modello memorizzato nella cache.

Tg_cache è un dizionario che accetta le seguenti chiavi:

  • key - La chiave della cache. Default: Nessuna.

  • expire - per quanto tempo la cache deve rimanere in vita. Default: non scade mai

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

L'esempio seguente illustra la memorizzazione nella cache dei modelli:

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