TurboGears - Önbelleğe alma
Bir web uygulamasının performansını artırmak için, özellikle uzun işlemlerle ilgiliyse, önbelleğe alma teknikleri kullanılır. TurboGears iki tür önbelleğe alma tekniği sağlar -
Whole-page Caching
Kullanıcının tarayıcısını veya bir ara proxy sunucusunun (Squid gibi) isteği durdurmasını ve dosyanın önbelleğe alınmış bir kopyasını döndürmesini sağlayarak sunucuya yönelik tüm istekleri önlemek için HTTP protokol düzeyinde çalışır.
Application-level Caching
Bu, uygulama sunucusunda hesaplanan değerleri, genellikle karmaşık veritabanı sorgularının sonuçlarını önbelleğe almak için çalışır, böylece gelecekteki istekler, değerleri yeniden hesaplama ihtiyacını ortadan kaldırabilir. Web uygulamaları için, uygulama düzeyinde önbelleğe alma, karmaşık sorguların sonuçlarını önbelleğe almak için esnek bir yol sağlar, böylece belirli bir denetleyici yönteminin toplam yükü, birkaç kullanıcıya özgü veya duruma özgü sorgulara ve bir şablonun işleme ek yüküne indirilebilir. .
Uygulama düzeyinde Önbelleğe Alma
Daha önce belirtildiği gibi, 'hızlı başlatılan' TurboGears projesi, önbelleğe alma desteği için Beaker paketini etkinleştirmek üzere yapılandırılmıştır. Beaker, önbellek depolaması için kullanılan aşağıdaki arka uçları destekler -
memory- İşlem başına depolama için kullanılır. Son derece hızlıdır.
filesystem - işlem başına depolama ve çok işlemli.
DBM database - işlem başına, çok işlemli, oldukça hızlı.
SQLAlchemy database- veritabanı sunucusu başına depolama. Yukarıda verilen seçeneklere kıyasla daha yavaş.
Memcached - çok sunuculu bellek tabanlı önbellek.
Denetleyici Önbelleğe Alma
Hızlı denetleyici önbelleğe almak için, bir cached()dekoratör mevcuttur. Denetleyici gövdesinin tamamı, çeşitli istek parametrelerine bağlı olarak önbelleğe alınır. Tanımıtg.decorators.cached() dekoratör aşağıdaki gibidir
tg.decorators.cached(key, expire, type,
query-args, cache_headers, invalidate_on_startup, cache_response)
Parametrelerin açıklaması aşağıdaki gibidir -
Sr.No. | Parametreler ve Açıklama |
---|---|
1 | key Önbellek anahtarını oluşturmak için kullanılan denetleyici parametrelerini belirtir. |
2 | expire Önbelleğin süresi dolmadan önce saniye cinsinden süre, Varsayılan "hiçbir zaman" dır. |
3 | Type dbm, memory, file, memcached veya None. |
4 | cache_headers Yanıt başlıklarını gösteren bir dizi başlık adı. |
5 | invalidate_on_startup True ise, uygulama her başladığında veya yeniden başlatıldığında önbellek geçersiz kılınır. |
6 | cache_response yanıt önbelleğe alınmalı veya alınmamalıdır, varsayılan olarak True. |
Aşağıda, denetleyiciyi önbelleğe almaya bir örnek verilmiştir -
@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
return "This is a cached controller!"
Şablon Düzeyinde Önbelleğe Alma
Genshi şablon motoru, içeriği değişmemişse şablonu bir önbellekten alır. Bu önbelleğin varsayılan boyutu 25'tir. Varsayılan olarak, şablonların otomatik olarak yeniden yüklenmesi doğrudur. Performansı artırmak için aşağıdaki ayarlar yapılabilir.app_cfg.py -
[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false
Bir şablonu önbelleğe almak için, tg_cache önbelleğe alınmış şablonu oluşturan denetleyiciden seçenek.
Tg_cache, aşağıdaki anahtarları kabul eden bir sözlüktür -
key - Önbellek anahtarı. Default: Yok.
expire - önbelleğin ne kadar süre hayatta kalması gerektiği. Default: hiçbir zaman tükenmez
type - bellek, dbm, memcached. Default: dbm.
Aşağıdaki örnek, şablon önbelleğe almayı gösterir -
@expose(hello.templates.user')
def user(self, username):
return dict(user = username, tg_cache = dict(key = user, expire = 900))