介绍
Django 是一个非常好的基于 Python 的平台,用于构建现代 Web 应用程序,其最大的优势之一是它有助于开发人员更快地工作。
事情很好,但现在你正在加载更多的数据,并且你开始有几个人同时使用它,它并不像你想的那样快。
幸运的是,我们有一些工具可以帮助缓解问题。
首先,让我们看看一些更明显的问题:
使用真实的数据库
在本地开发过程中,很难击败SQLite3,除非你小心,否则你可能也在虚拟服务器上使用它。
SQLite3 不会扩展到多个同时使用者,例如 MySQL 和 PostgreSQL,特别是对于执行许多写作操作的操作(如果您正在使用会话,那么您正在写入数据库)。
如果你使用的是低内存VPS,例如512MB dropplet,我建议使用MySQL. 如果你有储存内存(2GB或更多),那么我建议你考虑PostgreSQL,因为它是许多Django开发人员的喜好。
禁用 Debug 模式
调试模式在进行本地开发时是绝对必要的,但它会减慢您的生产服务器。 查看您的虚拟服务器的 settings.py 并检查以确保 DEBUG 设置为 False。
使用调试工具栏来解决性能问题
在本地开发计算机上,而不是生产服务器上,打开 Django Debug Toolbar以找到特定问题。
您可以通过安装 django-debug-toolbar 模块来完成此操作,然后在您的 MIDDLEWARE_CLASSES 字典中添加这样的条目:
1MIDDLEWARE_CLASSES = (
2 # ...
3 'debug_toolbar.middleware.DebugToolbarMiddleware',
4 # ...
5)
您还需要创建一个 INTERNAL_IPS 变量并添加您的 IP 地址. 如果您正在本地开发,您的 IP 地址很可能是 127.0.0.1,所以您会添加这样的行到您的 settings.py:
1INTERNAL_IPS = ('127.0.0.1',)
最后,添加 debug_toolbar 作为 INSTALLED_APPS 中的最后一个项目,如下:
1INSTALLED_APPS = (
2 # ...
3 'debug_toolbar',
4)
安装文档包含一些您可能需要考虑的更多细节和可选配置选项。
记住,不要意外地将这些变化推向生产!(如果你故意这样做,那就没关系了)。
现在你应该看到一个黑色面板出现在你的网页的侧面,当你浏览网站. 如果你喜欢统计数据和数字和各种神奇的细节,你会喜欢它。
<a href="Signals Áthaimg src="https://cdn.jsdelivr.net/gh/andsky/tutorials-images/assets/scale_django/img1.png">
建立了大量的Django应用程序,我建议您缩小面板的SQL部分,因为这通常是一个关注的领域。
Django 的一个好处/问题是执行查询时相关字段的 懒惰加载。
如果您需要相关的字段,这可能会导致 SQL 查询的 n + 1 次数。例如,假设您正在创建一个替代的 Twitter 版本。您创建了一个模型,用于推文,每个模型都与用户模型有关。在您的主页上,您列出了 30 个最新推文,以及创建它们的用户的名称。
這個問題的解決方法是 select_related。這是一個非常簡單的變更,導致Django在收集資料時進行連結。
您只需修改这样的查询:
1Entry.objects.get(id=5)
要像这样看:
1Entry.objects.select_related().get(id=5)
阅读此功能的文档,并只在必要时使用它。
包装上
根据我的经验,上述问题解决了许多网站的初始性能问题,所有这些问题都很容易用最小的代码和配置更改来解决。