如何缩放Django:找到瓶颈

介绍

Django是一个基于Python的平台,用于构建现代的网络应用程序。它最大的优势之一是它可以帮助开发人员更快地工作。 你已经构建了你的真棒应用程序并部署它。事情是伟大的,但现在,你加载它与更大量的数据,你开始有几个人在同一时间使用它,它不是你想要的那么快。 这是一个常见的问题。幸运的是,我们有一些工具来帮助缓解这些问题。 首先,让我们检查几个更明显的问题:

使用实数据库

在本地开发过程中,很难打败SQLite3。除非你小心,你可能也使用它在你的虚拟服务器上。 SQLite3不能扩展到多个并发用户,如MySQL和PostgreSQL,特别是对于执行许多写操作的操作(如果你正在使用会话,那么你正在写入数据库)。 如果你使用低内存VPS,例如512MBDroplet,我建议使用MySQL。如果你有内存(2GB或更多),那么我敦促你考虑PostgreSQL,因为它是许多Django开发人员的首选。

禁用调试模式

当进行本地开发时,调试模式是绝对必要的,但它会减慢您的生产服务器。查看您的虚拟服务器的settings.py并检查以确保DEBUG设置为False。还请确认TEMPLATE_DEBUG也设置为False或设置为DEBUG。

使用调试工具栏降低性能问题

在您的本地开发计算机,而不是生产服务器,开启 Django的调试工具栏找到具体问题。 您可以通过安装 Django的调试工具模块,然后添加到您的MIDDLEWARE_CLASSES条目做这本词典是这样的:
MIDDLEWARE_CLASSES = (
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
)
您还需要创建一个INTERNAL_IPS变量并添加您的IP地址。如果你在本地开发,你的IP地址可能是127.0.0.1,所以你可以添加一行这样到你的settings.py:
INTERNAL_IPS = ('127.0.0.1',)
最后,添加 debug_toolbar作为最后一个项目在你INSTALLED_APPS,就像这样:
INSTALLED_APPS = (
    # ...
    'debug_toolbar',
)
安装文档包含了一些细节,你可能要考虑的可选配置选项。 记住,不要在意外将这些更改推送到生产中! (如果你这样做的目的,那是很好)。 现在,当您浏览网站时,您应该会看到一个黑色面板显示在网页的侧面。如果你喜欢统计数据和数字和各种各样的怪异细节,你会喜欢它。你也会很快看到为什么你不想在生产服务器上这样做! 已经构建了许多Django应用程序,我建议你缩小面板的SQL部分,因为这通常是一个令人关注的领域。 一个Django的有益处/问题是延迟加载相关领域的执行查询时。这意味着Django不喜欢做连接。如果最终需要相关字段,则每次需要相关字段时,它都会执行一次附加查询。 如果确实需要相关字段,则可能导致n + 1个SQL查询。例如,假设您要制作Twitter的替换版本。您为tweet创建模型,每个模型都与User模型相关。在您的首页上,您列出了30条最新的tweets以及创建它们的用户的名称。这可以使您至少进行31次SQL查询。一个查询获取tweets列表,一个查询用于每个用户名查找。 对这个问题的解决方案是 select_related 。这是对查询的一个非常简单的修改,导致Django在提取数据时执行连接。你应该使用它在任何查找,你知道你将需要相关的字段。 您只需修改如下的查询:
Entry.objects.get(id=5)
看起来像这样:
Entry.objects.select_related().get(id=5)
阅读此功能的文档,仅在需要时使用。

包起来

在我的经验,上述问题解决了许多网站的初始性能问题,都很容易解决与最小的代码和配置更改。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏