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