📅  最后修改于: 2020-10-19 03:32:22             🧑  作者: Mango
为了增强Web应用程序的性能,特别是如果它涉及冗长的操作,则使用缓存技术。 TurboGears提供两种类型的缓存技术-
全页缓存
它在HTTP协议级别工作,通过让用户的浏览器或中间代理服务器(例如Squid)拦截请求并返回文件的缓存副本,从而避免了对服务器的整个请求。
应用程序级缓存
这在应用程序服务器中可以缓存通常是复杂数据库查询结果的计算值,以便将来的请求可以避免需要重新计算值。对于Web应用程序,应用程序级缓存提供了一种灵活的方法来缓存复杂查询的结果,从而可以将给定控制器方法的总负载减少到一些用户特定或案例特定的查询以及模板的呈现开销。 。
如前所述,“ quickstarted” TurboGears项目配置为启用Beaker软件包以支持缓存。烧杯支持以下用于缓存存储的后端-
内存-用于每个进程的存储。非常快。
文件系统-每进程存储以及多进程。
DBM数据库-每进程,多进程,相当快。
SQLAlchemy数据库-每个数据库服务器的存储。与上面给定的选项相比要慢一些。
Memcached-基于多服务器内存的缓存。
为了快速进行控制器缓存,可以使用cached()装饰器。根据请求的各种参数来缓存整个控制器主体。 tg.decorators.cached()装饰器的定义如下
tg.decorators.cached(key, expire, type,
query-args, cache_headers, invalidate_on_startup, cache_response)
参数的描述如下-
Sr.No. | Parameters & Description |
---|---|
1 |
key Specifies the controller parameters used to generate the cache key. |
2 |
expire Time in seconds before cache expires, Defaults to “neverâ€. |
3 |
Type dbm, memory, file, memcached, or None. |
4 |
cache_headers A tuple of header names indicating response headers. |
5 |
invalidate_on_startup If True, cache is invalidated each time application starts or is restarted. |
6 |
cache_response response should be cached or not, defaults to 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-缓存键。默认值:无。
expire-缓存必须保持生存的时间。默认值:永不过期
类型-内存,dbm,memcached。默认值: dbm。
以下示例说明了模板缓存-
@expose(hello.templates.user')
def user(self, username):
return dict(user = username, tg_cache = dict(key = user, expire = 900))