1

我在 Python、Django 框架中创建了 Web 应用程序。Web 应用程序从 MongoDB 数据库中获取数据,它从 MongoDB 数据库中获取大约 10000 个文档,并且运行速度非常慢。现在正在寻找加速我的网络应用程序的方法。那么,是否可以将方法的结果render_to_response作为 HTML 临时存储在服务器上?它看起来像这样:我有一个 HTML 表单;当用户在表单中键入数据并单击提交按钮时,Web 应用程序执行一个从 Mongo 数据库获取数据的视图,并通过变量将该数据发送 mongo_datahome.html

return render_to_response('home.html', {'mongo_data': mongo_data, 'request': request},
                          context_instance=RequestContext(request))

home.html显示存储在变量中的数据mongo_data。在 Web 应用程序中,我有很多相同的查询,对于相同的查询,我得到相同的结果home.html。所以我想存储home.html到例如temp服务器上的文件夹中,当用户在 HTML 表单中输入数据并单击提交按钮时,首先要检查home.html他的数据是否在temp文件夹中;如果是,则加载该home.html,如果不是,则查看将生成新home.html的特定mongo_data. 如果这是可能的,它将大大加快我的网络应用程序..

4

1 回答 1

5

Django 缓存框架正是为此目的而设计的。请参阅https://docs.djangoproject.com/en/dev/topics/cache/

在您的情况下,您可以将整个视图缓存一段时间:

@cache_page(60 * 15)
def my_mongo_view(request):
    return render_to_response('home.html', ...)

(来自https://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache

或者您使用低级缓存 API ( https://docs.djangoproject.com/en/dev/topics/cache/#the-low-level-cache-api ):

from django.core.cache import cache

def my_mongo_view(request):
    ret = cache.get('home-rendered')
    if ret is None:
        ret = render_to_response('home.html', ...)
        cache.set('home-rendered', ret)
    return ret

如果您只是阅读文档,您会发现更多缓存选项(例如在您的模板中)。

PS您还可以通过变量或用户ID或其他东西参数化您的缓存。

于 2013-09-30T12:02:05.767 回答