1

我有一些代码导致我的页面加载速度很慢(128 毫秒内有 49 个查询)。这是我网站的登陆页面——所以它需要快速加载。

以下是我的views.py,它在站点上创建了最新更新的提要,并导致我在调试工具栏中看到的加载时间最慢:

def product_feed(request):
    """ Return all site activity from friends, etc. """
    latestparts = Part.objects.all().prefetch_related('uniparts').order_by('-added')
    latestdesigns = Design.objects.all().order_by('-added')
    latest = list(latestparts) + list(latestdesigns)
    latestupdates = sorted (latest, key = lambda x: x.added, reverse = True)
    latestupdates = latestupdates [0:8]
    # only get the unique avatars that we need to put on the page so we're not pinging for images for each update
    uniqueusers = User.objects.filter(id__in = Part.objects.values_list('adder', flat=True))
    return render_to_response("homepage.html", {
    "uniqueusers": uniqueusers,
    "latestupdates": latestupdates
    }, context_instance=RequestContext(request))

导致最多时间的查询似乎是:

  latest = list(latestparts) + list(latestdesigns) (25ms)

还有一个我也在调查的分别是 17 毫秒(站点范围的公告)和 25 毫秒(在每个产品提要项上添加标记项)。

有没有人看到我可以优化我的活动提要加载的任何方法?

4

3 回答 3

1

您永远不需要超过 8 个项目,因此请限制您的查询。并且不要忘记确保added在两个模型中都被索引

latestparts = Part.objects.all().prefetch_related('uniparts').order_by('-added')[:8]
latestdesigns = Design.objects.all().order_by('-added')[:8]

对于加分,消除幻数。

于 2012-12-07T18:59:53.563 回答
0

在使这些查询更快一点之后,您可能需要查看memcache以存储最常见的查询结果。

于 2012-12-07T19:08:34.630 回答
0

而且,我相信adderForeignKey为了User模型。

Part.objects.distinct().values_list('adder', flat=True)

上面的行QuerySet具有唯一addre值。我相信你确实是这样说的。

它可以节省您执行 subuery。

于 2012-12-08T21:57:39.000 回答