1. 关于 Django 的性能
Django 是一个 Python 写的 Web 应用框架。使用 Django ,可以非常简单、高效地开发复杂的数据驱动的网站。同时,Django 非常注重组件的重用性、可插拔、敏捷开发、DRY(Don’t Repeat Yourself)。从一定程度上讲,Django 是一个很适合做业务逻辑实现的应用框架。笔者曾经利用 Docker 做过一次 Django 的性能测试,得到的结论是在 intel i5-5300 2.3GHz,8GB 内存,SSD 配置的笔记本电脑上,Django 的读取 DB 接口的并发只有 360 次请求/秒。Django 牺牲性能,降低了学习成本,提高了开发效率。 通常,可以在如下几个方面优化 Django 的性能:
- 数据库。 加缓存可能是最直接的方法,还可以优化查询语句
- 模板。 Django 自带的模板比较慢,可以试试 Mako, Jinja2
- Python。 升级到 Python 3,利用 Python 3 中的新特性,例如,asyncio
如何找出 Django 的性能瓶颈呢?可以关注如下几个方面:
- 执行了多少条 SQL 语句
- 有多少时间花费在数据库上
- 执行了什么特殊的查询操作,每次查询花费多长时间
- 这些查询是有什么代码生成的
- 渲染页面都用到了哪些模板
- 冷/热缓存是如果影响性能的
绝大部分的性能瓶颈是数据库部分,下面介绍 Django 的性能检测工具 django-debug-tools ,一个非常强大的 Django 性能检测工具。
2. django-debug-tools
2.1 安装
|
|
2.2 配置
settings.py
|
|
如果配置完,并没有显示 Panel ,那么你需要的是下面这个配置
|
|
url.py
```python
from django.conf import settings
from django.conf.urls import include, url
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls)),
] + urlpatterns
2.3 使用
重新启动 Django 工程,在页面右侧即可看到 Panel,提供各种参数的 Panel ,点击查看。
3. django-debug-panel
django-debug-toolbar 是一个不错的 Django 性能检测工具,但是 django-debug-toolbar 不能处理 Ajax 和非 HTML 请求。django-debug-panel 在 django-debug-toolbar 的基础上,提供了更好的单页面应用和 Ajax 请求的支持。
3.1 安装
|
|
3.2 配置
首先,安装配置 django-debug-toolbar。settings.py
|
|
使用 panel 的中间件,替换 toolbar 的中间件。middlewares.py
|
|
安装 Chrome 插件 Django Debug Panel
3.3 使用
重启 Django 工程和 Chrome 调试面板。刷新页面,即可看到每个接口,对应的 SQL 等相关信息。
4. 第三方的 Panel
django-debug-toolbar 还拥有一些第三方的 Panel,可以非常方便的与其他 Python 性能检测工具集成使用。
4.1 Line Profiler
debug_toolbar_line_profiler.panel.ProfilingPanelLine Profiler 可以对函数进行逐行分析,主要用于 CPU 密集型性能检测。
4.2. Pympler
pympler.panels.MemoryPanelPympler 是一个用来查看,监控 Python 对象内存的一个开发工具。
5. 参考
- https://github.com/recamshak/django-debug-panel
- https://mozillazg.github.io/2015/09/high-performance-django-note-1.html
- https://django-debug-toolbar.readthedocs.io/en/stable/
- http://django-debug-toolbar.readthedocs.io/en/stable/panels.html