6

几周前我问了这个问题。今天,我实际上已经编写并发布了一个标准的 Django 应用程序,即一个由Google CloudSQL支持的全功能关系数据库支持(因此也是全功能 Django 管理员) 。唯一一次我不得不偏离标准的 Django 方式是发送电子邮件(必须以 GAE 方式进行)。我的设置是GAE 1.6.4,,使用以下内容:Python2.7Django 1.3app.yaml

libraries:
- name: django
  version: "1.3"

但是,我确实需要您提出明确的可操作步骤,以改善此 Django 应用程序冷时初始请求的响应时间。webapp2在 GAE 上有一个简单的网站,它不会访问数据库,并且在时响应时间为1.56s. Django 一个,当count(*)时,用 2 个查询(对每个包含少于 300 行的表的两个查询)命中数据库,响应时间为10.73s!不鼓励主页;)

想到的事情是删除middleware我不需要的类和其他特定于 Django 的优化。然而,从 GAE 的角度来看,改善事物的技巧也会非常有用。

注意我不希望这成为关于在 GAE 上选择 Django 的优点的讨论。我可以提一下,我个人的 Django 专业知识,以及由此产生的开发效率,确实对采用 Django 而不是其他框架产生了很大影响。此外,使用 CloudSQL,很容易摆脱 GAE(希望不会!),因为 Django 代码只需很少(或无需)修改即可在其他任何地方工作。可以在此处此处找到有关此类主题的相关讨论。

4

2 回答 2

2

当没有实例运行时,例如版本升级后或15分钟没有请求时,一个请求会触发加载一个实例,大约需要10秒。所以你看到的是正常的。

因此,如果您的应用空闲时间超过 15 分钟,您将看到此行为。一种解决方法是让cron作业每 10 分钟 ping 一次您的实例(尽管我相信谷歌不喜欢那样)。

更新:

您可以通过启用计费来避免这种情况,然后在“应用程序设置”下的 GAE 管理员中将minimum空闲实例设置设置为 1。注意:该min设置不适用于免费应用程序,仅max.

于 2012-03-30T13:08:45.900 回答
2

我没有完整的答案,但我正在做出贡献,因为我也想找到一个解决方案。我目前正在使用一个正在运行的 cron 作业(我实际上需要 cron 作业,所以它不仅仅是为了让我的应用程序保持活力)。

我在 GAE/Python/Django 相关邮件列表之一中看到过,与 webapp 相比,加载所有 Django 文件所需的时间很重要,因此从部署中删除不使用的 django 组件应该也可以改善您的启动时间。通过删除 contrib 文件夹的某些部分,我已经能够减少大约 3 秒。我将它们排除在我的 app.yaml 中。

我的启动时间仍然在 6 秒左右(完整应用程序、Django-nonrel、HRD)。当我的应用程序更简单时,它曾经更像 4。

我怀疑 Django 在启动时会验证其所有模型,并且处理时间很重要。如果您有时间尝试使用绝对 0 个模型的应用程序,我会很好奇它是否会产生任何影响。

我也很好奇您的两个初始查询是否会产生重大影响。

于 2012-03-30T13:56:54.510 回答