目录

    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 安装

    pip install django-debug-toolbar
    

    2.2 配置

    settings.py

    INSTALLED_APPS = [
        # ...
        'django.contrib.staticfiles',
        # ...
        'debug_toolbar',
    ]
    MIDDLEWARE = [
        # ...
        'debug_toolbar.middleware.DebugToolbarMiddleware',
        # ...
    ]
    

    如果配置完,并没有显示 Panel ,那么你需要的是下面这个配置

    DEBUG_TOOLBAR_CONFIG = {
        "SHOW_TOOLBAR_CALLBACK": lambda request: DEBUG,
    }
    
    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 安装

    pip install django-debug-panel
    

    3.2 配置

    首先,安装配置 django-debug-toolbar。

    settings.py

    INSTALLED_APPS = (
        # ...
        'debug_panel',
    )
    

    使用 panel 的中间件,替换 toolbar 的中间件。

    middlewares.py

    MIDDLEWARE_CLASSES = (
        ...
        # 'debug_toolbar.middleware.DebugToolbarMiddleware',
        'debug_panel.middleware.DebugPanelMiddleware',
        ...
    )
    

    安装 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.ProfilingPanel

    Line Profiler 可以对函数进行逐行分析,主要用于 CPU 密集型性能检测。

    4.2. Pympler

    pympler.panels.MemoryPanel

    Pympler 是一个用来查看,监控 Python 对象内存的一个开发工具。

    5. 参考