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