几周前我问过你。今天,我实际上已经编写并发布了一个标准的Django应用程序,即一个由Google CloudSQL支持的全功能关系数据库支持(因此也是功能齐全的Django-admin)。唯一一次,我不得不偏离标准的Django方式来做事情,那就是发送电子邮件(必须用GAE的方式)。我的设置是GAE 1.6.4
,Python2.7
,Django 1.3
,使用app.yaml
:
libraries:
- name: django
version: "1.3"
不过,我确实需要您建议明确的可操作步骤,以提高此Django应用程序在冷态时的初始请求响应时间。我在GAE上有一个简单的webapp2
网站,它不会撞到数据库,当冷时,响应时间是1.56s
。Django one,当cold时,用2个查询(两个count(*)
查询每个表包含少于300行),响应时间是10.73s
!不鼓励使用主页;)
我想到的是删除我不需要的middleware
类和其他特定于Django的优化。然而,从GAE的角度来改进事情的技巧是非常有用的。在
N.B.我不想让这成为关于在GAE上支持Django的优点的讨论。我可以提到,我个人的Django专业知识,以及由此产生的开发生产力,在采用Django方面确实有相当大的影响,而不是其他框架。此外,使用CloudSQL,很容易摆脱GAE(希望不是!)因为Django代码可以在其他任何地方工作,只需很少(或没有)修改。关于这个主题的相关讨论可以在here和here找到。在
当没有实例运行时,例如版本升级后,或者15分钟内没有请求时,那么一个请求会触发一个实例的加载,大约需要10秒,所以你看到的是正常的。在
因此,如果你的应用程序闲置超过15分钟,你会看到这种行为。一种解决方法是每隔10分钟让一个cron作业ping你的实例(尽管我相信google不喜欢这样)。在
更新:
您可以通过启用计费然后在GAE管理的“应用程序设置”下设置
minimum
空闲实例设置为1来避免这种情况。注意:min
设置在免费应用程序上不可用,只有max
。在我没有一个完整的答案,但我正在贡献,因为我也想找到一个解决办法。我目前正在使用一个正在运行的cron作业(我实际上需要cron作业,所以它不仅可以让我的应用程序保持运行)。在
我在一个与GAE/Python/Django相关的邮件列表中看到过这样的讨论:与webapp相比,加载所有Django文件所需的时间是非常重要的,因此从部署中删除不使用的Django组件也可以提高启动时间。我已经可以通过删除contrib文件夹的某些部分来节省大约3秒钟的时间。我把他们排除在我的应用程序yaml. 在
我的启动时间仍然在6秒左右(完整应用程序、Django nonrl、HRD)。当我的应用程序更简单的时候,它更像是4。在
我的怀疑是Django在启动时验证了它的所有模型,而且处理时间很长。如果你有时间用一个绝对0模型的应用程序做实验,我会好奇它是否产生了任何影响。在
我也很好奇你最初的两个查询是否产生了重大影响。在
相关问题 更多 >
编程相关推荐