Python 优化Django

Python 优化Django,python,mysql,django,debugging,design-patterns,Python,Mysql,Django,Debugging,Design Patterns,我的页面加载速度有问题 现在加载页面大约需要7秒,Django处理需要2~3秒 明显的原因是我缺乏架构知识,访问页面时平均执行50次查询,如“Django debug tool bar”所示,但大多数查询类似于“昨天的快照(按某物分组)”或“昨天之前的每日快照(按某物分组)”,不必每次更新 我的想法是使用内存缓存或创建新表来准备可能的数据类型 这类问题有什么惯例或设计模式吗 示例查询包括以下内容(我相信它们不能每次都查询昨天的数据或上月的数据): 如果这是一个向internet公开的生产应用程序

我的页面加载速度有问题

现在加载页面大约需要7秒,Django处理需要2~3秒

明显的原因是我缺乏架构知识,访问页面时平均执行50次查询,如“Django debug tool bar”所示,但大多数查询类似于“昨天的快照(按某物分组)”或“昨天之前的每日快照(按某物分组)”,不必每次更新

我的想法是使用内存缓存或创建新表来准备可能的数据类型

这类问题有什么惯例或设计模式吗

示例查询包括以下内容(我相信它们不能每次都查询昨天的数据或上月的数据):


如果这是一个向internet公开的生产应用程序,并且您无法减少查询的数量,那么您至少应该重用这些答案,我建议使用django的内置DB缓存,使用memcached将数据库结果存储在ram中。如果这是一个本地应用程序,那么我建议使用django的基于ram的缓存。原因是memcached可以比django扩展得更远,但是django只需要很少的设置


如果这是一个向internet公开的生产应用程序,并且您无法减少查询数量,那么您至少应该重用这些答案,我建议使用django的内置DB缓存,使用memcached将数据库结果存储在ram中。如果这是一个本地应用程序,那么我建议使用django的基于ram的缓存。原因是memcached可以比django扩展得更远,但是django只需要很少的设置

使用电脑确实可以加快速度。然而,这确实带来了问题。在动态页面上,您必须特别小心在需要时显式地使缓存无效

除了Memcached,还可以尝试使用它来很好地缓存django ORM查询

同时,尽可能利用。(如果使用Memcached,请尝试缓存的_db会话引擎。)您可以保存在整个会话中保持一致的对象(如用户配置文件设置)。这样,您就可以再次减少sql调用的数量

如果你真的需要快速加载页面。。也许可以尝试加载页面,然后使用异步调用sql语句,并以AJAXy方式加载结果。

使用确实可以加快速度。然而,这确实带来了问题。在动态页面上,您必须特别小心在需要时显式地使缓存无效

除了Memcached,还可以尝试使用它来很好地缓存django ORM查询

同时,尽可能利用。(如果使用Memcached,请尝试缓存的_db会话引擎。)您可以保存在整个会话中保持一致的对象(如用户配置文件设置)。这样,您就可以再次减少sql调用的数量


如果你真的需要快速加载页面。。也许可以尝试加载页面,然后使用异步调用sql语句,并以AJAXy方式加载结果。

我想您是让Django为您完成所有查询的吧?因为
groupby
有时会非常慢,一般来说,这些信息远远不够帮助您,但我可以说,您犯了无数其他人犯的错误。调试工具栏显示的加载时间仅与其他视图或同一视图的其他迭代相关,与页面的整体真实速度无关。“调试”工具栏大大降低了处理和渲染的速度。使用调试工具栏加载一个页面需要7秒钟,没有调试工具栏可能只需要不到一秒钟。请给出一些查询示例,如果您知道自己在做什么,可以做很多事情来加快django。Charlieng,John,Jharwood,这是从django工具栏获取的示例查询。Chris,谢谢您的建议。但是,我的萤火虫显示2~3秒 在渲染上,这似乎与django工具栏的结果一致。Apache或网络日志显示它们响应速度相当快。我想您是让django为您执行所有查询的吧?因为
groupby
有时会非常慢,一般来说,这些信息远远不够帮助您,但我可以说,您犯了无数其他人犯的错误。调试工具栏显示的加载时间仅与其他视图或同一视图的其他迭代相关,与页面的整体真实速度无关。“调试”工具栏大大降低了处理和渲染的速度。使用调试工具栏加载一个页面需要7秒钟,没有调试工具栏可能只需要不到一秒钟。请给出一些查询示例,如果您知道自己在做什么,可以做很多事情来加快django。Charlieng,John,Jharwood,这是从django工具栏获取的示例查询。Chris,谢谢您的建议。但是,我的萤火虫显示2~3秒 在渲染上,这似乎与django工具栏的结果一致。Apache或网络日志显示它们响应速度相当快。谢谢。我将尝试缓存、会话中间件和芹菜(我最喜欢的)!谢谢。我会试试缓存、会话中间件和芹菜(我最喜欢的)!谢谢。我的应用程序是在internet上公开的。我可以使用redis而不是memcached进行DB缓存吗?从未使用过redis,但Django支持memcached开箱即用。谢谢。我的应用程序是在internet上公开的。我可以使用redis而不是memcached进行DB缓存吗?从未使用过redis,但Django支持memcached开箱即用。
SELECT `sample_salestarget`.`id`, `sample_salestarget`.`country_id`,                    `sample_salestarget`.`year`, `sample_salestarget`.`month`, `sample_salestarget`.`sales`  FROM `sample_salestarget` WHERE (`sample_salestarget`.`country_id` = "abc" AND `sample_salestarget`.`month` = 8 AND `sample_salestarget`.`year` = 2012 )

SELECT `sample_dailysummary`.`id`, `sample_dailysummary`.`country_id`, `sample_dailysummary`.`date`, `sample_dailysummary`.`pv_day`, `sample_dailysummary`.`pv_week`, `sample_dailysummary`.`pv_month`, `sample_dailysummary`.`active_uu_day`, `sample_dailysummary`.`active_uu_week`, `sample_dailysummary`.`active_uu_month`, `sample_dailysummary`.`active_uu_7days`, `sample_dailysummary`.`active_uu_30days`, `sample_dailysummary`.`paid_uu_day`, `sample_dailysummary`.`paid_uu_week`, `sample_dailysummary`.`paid_uu_month`, `sample_dailysummary`.`sales_day`, `sample_dailysummary`.`sales_week`, `sample_dailysummary`.`sales_month`, `sample_dailysummary`.`register_uu_day`, `sample_dailysummary`.`register_uu_week`, `sample_dailysummary`.`register_uu_month`, `sample_dailysummary`.`pay_count_day`, `sample_dailysummary`.`pay_count_week`, `sample_dailysummary`.`pay_count_month`, `sample_dailysummary`.`total_user`, `sample_dailysummary`.`inv_access_uu`, `sample_dailysummary`.`inv_sender_uu`, `sample_dailysummary`.`inv_accepted_uu`, `sample_dailysummary`.`inv_send_count`, `sample_dailysummary`.`memo`, `sample_dailysummary`.`first_charge_uu` FROM `sample_dailysummary` WHERE `sample_dailysummary`.`date` = 2012-09-07 AND `sample_dailysummary`.`country_id` = "abc" )