4

我开始分析我的应用程序,发现有一段代码比其他代码需要更长的时间才能完成。在视图中,我正在从数据库中检索一些数据并对其进行一些转换。在模板中,有一个过滤器将获取这些转换后的数据并将其转换为 HTML。

我意识到我可以利用缓存,因为这个组件不会经常更改,但我想知道最好的方法是什么。我可以缓存数据库调用/转换的结果,但我也可以缓存模板片段。我需要缓存两件事以获得最佳效果似乎很奇怪,所以我想我的代码应该有不同的结构,所以我只需要将数据缓存在一个位置。

我的一个想法是从模板过滤器函数中进行数据库调用,但我一直试图将我的模型代码保留在模板过滤器之外。

处理此类问题的最佳方法是什么?

4

2 回答 2

1

如果转换可以表示为复杂的查询集,您可以在模板中评估它,而无需在视图中缓存。如果没有,你可以

  • 在缓存块内的模板标签中执行逻辑
  • 包装逻辑并将其传递给渲染,通常以闭包或模型方法的形式
  • 只做视图缓存,只要渲染过程简单
  • 在 TemplateResponse 的帮助下检查 SSI 的可能性
  • 编写代码以检查并使用视图中的模板缓存,同时考虑可能的竞争写入和狗堆问题。

此外,对于查询集缓存,您可以尝试johnny-cache以及django-cache-machine

于 2012-04-04T17:59:49.947 回答
0

您不需要在视图和模板片段中缓存。缓存的想法是,一旦你缓存了一些东西,你就可以从缓存中获取它,直到缓存键过期。

在视图中缓存数据库结果意味着编写一些特定于视图逻辑的代码,您可能需要在每次逻辑更改时进行更改。

缓存模板片段是一种更好的方法,因为即使您更改模板“逻辑”,只要将片段保留在缓存块中,缓存将继续工作。

恕我直言,您缓存的最终响应越接近,缓存逻辑就越可靠。

于 2012-04-04T16:17:13.790 回答