启动我的第二个Django网站。
我在过去使用Django的ORM时遇到了问题(基本上,它产生的SQL不是我想要的,甚至使用像select_related()
这样的东西我无法将它变成它应该的东西'我最后只是在我的视图中手工编写了所有数据库查询,并使用了从Django文档中获取的函数将cursor
的响应转换为可用的词典:
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(添加缺失的索引等)。
这是应用程序,在两个不同的webhost上运行(使用bit.ly来避免Google抓住这些URL,抱歉!):
目前,我在这两台主机上都有Debug=False
(所以不应该有加载惩罚),每个主机的基于文件的缓存为15分钟。在Dreamhost上我每15分钟就有一个实验性的cronjob点击主页,以确定这是否能让Python服务器保持活跃状态 - 这似乎没有做太多。
如果您尝试这些链接,您应该看到服务器在您点击时响应需要多长时间,甚至包括缓存(尝试从主页转到另一页然后回家)。
我已经尝试了this profiling middleware但不确定如何解释结果(可以在我回家后将它们添加到此帖子中) - 无论如何,它指向的函数/行都是在Django自己的代码中,所以我努力将它与我自己的观点联系起来。
上面的dictfetchall()
方法可能会成为问题吗?我使用它来处理网站上每个数据库查询的结果(每页约5-10页,大多数在主页上)。我确实有一些包含的模板,但没有什么太疯狂。我有一个上下文处理器,用于显示专辑评论等常见内容,我在各处都使用。我很难知道还有什么可能导致这种缓慢。
谢谢,希望这是足够有用的信息。
编辑:好的,这是网站主页的分析跟踪:http://pastebin.com/raw.php?i=c7kHNXAZ - 说实话,正在努力解释它。
另外,我查看了调试工具栏的统计信息:246ms内的8个SQL查询(目前正在进一步优化这些查询),但渲染的总时间为3235毫秒(本地)。这让我感到困惑。