django减少查询加载时间

时间:2015-04-10 10:32:34

标签: python django nginx

我使用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>

如何减少加载时间。 enter image description here

如何减少等待时间?

1 个答案:

答案 0 :(得分:2)

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

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

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

OTHO如果您需要相关对象,请在查询中使用"select_related"关键字arg以避免“n + 1个查询”问题。

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

此时,至少在ORM / db级别,你应该已经有了显着的提升。如果渲染本身(模板级别)仍然需要花费太多时间,那么可以考虑使用cache