TurboGears – 캐싱

웹 애플리케이션의 성능을 향상시키기 위해, 특히 긴 작업에 관련된 경우 캐싱 기술이 사용됩니다. TurboGears는 두 가지 유형의 캐싱 기술을 제공합니다.

Whole-page Caching

HTTP 프로토콜 수준에서 작동하여 사용자의 브라우저 또는 중간 프록시 서버 (예 : Squid)가 요청을 가로 채서 파일의 캐시 된 복사본을 반환하도록하여 서버에 대한 전체 요청을 방지합니다.

Application-level Caching

이는 응용 프로그램 서버 내에서 작동하여 계산 된 값 (종종 복잡한 데이터베이스 쿼리의 결과)을 캐시하므로 향후 요청에서 값을 다시 계산할 필요가 없습니다. 웹 애플리케이션의 경우 애플리케이션 수준 캐싱은 복잡한 쿼리의 결과를 캐시하는 유연한 방법을 제공하여 주어진 컨트롤러 메서드의 총로드를 몇 가지 사용자 별 또는 사례 별 쿼리와 템플릿의 렌더링 오버 헤드로 줄일 수 있습니다. .

애플리케이션 수준 캐싱

앞서 언급했듯이 '빠른 시작'TurboGears 프로젝트는 캐싱 지원을 위해 Beaker 패키지를 활성화하도록 구성됩니다. Beaker는 캐시 스토리지에 사용되는 다음 백엔드를 지원합니다.

  • memory− 프로세스 별 저장에 사용됩니다. 매우 빠릅니다.

  • filesystem − 프로세스 별 저장 및 다중 프로세스.

  • DBM database − 프로세스 별, 다중 프로세스, 상당히 빠름.

  • SQLAlchemy database− 데이터베이스 서버 당 스토리지. 위에 주어진 옵션에 비해 느립니다.

  • Memcached − 다중 서버 메모리 기반 캐시.

컨트롤러 캐싱

빠른 컨트롤러 캐싱을 위해 cached()데코레이터를 사용할 수 있습니다. 요청의 다양한 매개 변수에 따라 전체 컨트롤러 본문이 캐시됩니다. 정의tg.decorators.cached() 데코레이터는 다음과 같습니다

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

매개 변수에 대한 설명은 다음과 같습니다.

Sr. 아니. 매개 변수 및 설명
1

key

캐시 키를 생성하는 데 사용되는 컨트롤러 매개 변수를 지정합니다.

2

expire

캐시가 만료되기까지의 시간 (초), 기본값은 "never"입니다.

Type

dbm, 메모리, 파일, memcached 또는 없음.

4

cache_headers

응답 헤더를 나타내는 헤더 이름의 튜플입니다.

5

invalidate_on_startup

True이면 응용 프로그램이 시작되거나 다시 시작될 때마다 캐시가 무효화됩니다.

6

cache_response

응답은 캐시에 저장되어야합니다. 기본값은 True입니다.

다음은 컨트롤러 캐싱의 예입니다.

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

템플릿 수준 캐싱

Genshi 템플릿 엔진은 내용이 변경되지 않은 경우 캐시에서 템플릿을 검색합니다. 이 캐시의 기본 크기는 25입니다. 기본적으로 템플릿 자동 다시로드는 true입니다. 성능 향상을 위해 다음 설정을 지정할 수 있습니다.app_cfg.py

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

템플릿을 캐시하려면 tg_cache 캐시 된 템플릿을 렌더링하는 컨트롤러의 옵션입니다.

tg_cache는 다음 키를 받아들이는 사전입니다-

  • key − 캐시 키. Default: 없음.

  • expire − 캐시가 살아 있어야하는 기간. Default: 만료되지 않음

  • type − 메모리, dbm, memcached. Default: dbm.

다음 예제는 템플릿 캐싱을 보여줍니다-

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