1

启动我的第二个 Django 站点。

过去,我在使用 Django 的 ORM 时遇到过问题(基本上,它生成的 SQL 并不是我想要的,甚至使用了select_related()我无法将其变成应有的东西)——我最终只需在我的视图中手动编写我所有的数据库查询,并使用从 Django 文档中获取的这个函数,将cursor's 的响应转换为可用的字典:

def dictfetchall(cursor, returnMultiDictAnyway=False):
    "Returns all rows from a cursor as a dict"
    desc = cursor.description
    rows = [
        dict(zip([col[0] for col in desc], row))
        for row in cursor.fetchall()
    ]

    if len(rows) == 1 and not returnMultiDictAnyway:
        return rows[0]
    return rows

我几乎准备好启动我的网站,但我在尝试托管应用程序的两个不同的网络服务器上发现了相当大的性能问题。

在本地,它的运行速度并不快,但我通常把它归结为我的机器通常有点慢。我手头没有数字(稍后会添加),但 SQL 时间并没有太高,而且我已经努力优化 MySQL(添加缺失的索引等)。

这是在两个不同的网络主机上运行的应用程序(使用 bit.ly 来避免 Google 抓取这些 URL,抱歉!):

目前我Debug=False在这两台主机上都有(所以不应该有加载惩罚)和每台 15 分钟的基于文件的缓存。在 Dreamhost 上,我有一个实验性的 cronjob 每 15 分钟访问一次主页,以查看这是否能让 Python 服务器保持活动状态——这似乎并没有起到多大作用。

如果您尝试这些链接,您应该会看到服务器在您单击时响应需要多长时间,甚至包括缓存(尝试从主页转到另一个页面然后返回主页)。

我已经尝试过这个分析中间件,但不确定如何解释结果(可以稍后我回家时将它们添加到这篇文章中)——无论如何,它指向的函数/行都在 Django 自己的代码中,所以我努力将其与我自己的观点等联系起来。

上面的dictfetchall()方法在这里可能是个问题吗?我用它来处理网站上每个数据库查询的结果(每页约 5-10 个,大多数在主页上)。我确实有一些包含的模板,但没有什么太疯狂的。我有一个用于显示专辑评论等常见事情的上下文处理器,我到处都在使用它。我很困惑还有什么可能导致这种缓慢。

谢谢,希望这是足够的信息来提供帮助。

编辑:好的,这是网站主页的分析跟踪:http ://pastebin.com/raw.php?i=c7kHNXAZ——说实话,很难解释它。

另外,我查看了调试工具栏的统计信息:8 个 SQL 查询在 246 毫秒内(目前正在进一步优化这些),但总渲染时间为 3235 毫秒(本地)。这让我感到困惑。

4

0 回答 0