django 减少查询加载时间

django reduce query load time

我使用 nginx 作为服务器。

在使用 Django 加载简单的 html 页面时,无需任何查询,加载仅需 34 毫秒。

<html><body><h1> Test</h1></body></html>

如果运行 某些查询(查询中有 500 行)加载页面需要 4 秒。

views.py

def testing3(request):
        context = User.objects.all()
        return render_to_response('pages/index1.html',  {'users': context,})

index1.html

<html>
<head> <title>Testing  </title>    </head>
<body>
Testing
<h1>Testing</h1>
{% for e in users %}
<table>
        <tr> <td class="active">{{ e.username }}</td>
          <td>{{ e.email }}</td>    </tr>
</table>
        {% endfor %}
</body>
</html>

如何减少加载时间。

如何减少这个等待时间?

首先:优化您的数据库查询。

如果您只想显示几个数据库字段(在您的示例中为 user.usernameuser.email)并且不需要任何模型方法,请改用 ValuesQuerySet :

def myview(request):
    users = User.objects.values("username", "email")
    return render_to_response('pages/index1.html',  {'users': users,})

如果您需要相关对象,请在查询中使用 "select_related" 关键字参数以避免 "n+1 queries" 问题。

完成此操作后,如果您查询 returns 数百条或更多记录,您需要 paginate 查询集。这对于查询集特别有效,因为它使用 SQL offsetlimit 子句,因此分页实际上是在数据库级别完成的。

在这一点上,您应该至少在 ORM/db 水平上有了显着的提升。如果渲染本身(模板级别)仍然需要太多时间,那么是时候考虑使用 cache.