减少从 django "for loops"模板中启动的数据库查询数量 - Django 网站非常慢



我在优化网站加载时间方面遇到了困难。我安装了Django Debug Toolbar,看看我3到4秒的请求延迟是从哪里来的。事实上,它来自许多重复的SQL查询。

最近,我优化了视图代码,这样就不会出现查询重复,但其中最重要的部分来自我的模板渲染,尤其是我的for循环(遗憾的是,到处都是(。

这里有一个例子:

  • 此页面显示事务,分为几个部分。它的页码是48。由于我的模板的组织,我被迫"for循环"每个类别中链接到用户的每个事务,并进行一些if/elif/else处理
  • 从我看到的6个for循环中删除了5个,每次启动for循环时,它都会到达我的RDS数据库,这听起来并不高效,而且需要很长时间才能加载

我看到了一些缓存方法,但我不知道我的案例是否适用于这种方法。

跟踪相关对象时使用select_related((。

这是一种性能提升,会导致单个更复杂的查询,但意味着以后不需要使用外键关系数据库查询。

您在模板中到处关注相关对象,例如offer(offer.)thing。如果在查询集中包含select_related('offer', 'offer__thing'),则会显著减少查询数量。

为了您将来的参考,还可以使用prefetch_related((来研究以下关系。这与你的情况无关,但要记住这一点,以备将来之用。

最新更新