在Django中剖析视图的最佳方法是什么?

3 投票
4 回答
2535 浏览
提问于 2025-04-15 17:25

我用Django开发了一个应用程序,一切都运行得很好,但我不知道背后发生了什么。我想了解:

  • 每次请求数据库被访问了多少次?
  • 每个查询的执行时间是多少?
  • 渲染模板花了多长时间?
  • 常规的性能分析信息(每个函数的调用次数和总时间)。

有没有可以安装的中间件来处理这些问题?有哪些最佳实践可以用来分析我的视图性能?

谢谢

4 个回答

0
{% if debug %}
    <div id="debug">
    <h2>Queries</h2>
    <p>
        {{ sql_queries|length }} Quer{{ sql_queries|pluralize:"y,ies" }}
        {% ifnotequal sql_queries|length 0 %}
        (<span style="cursor: pointer;" onclick="var s=document.getElementById('debugQueryTable').style;s.display=s.display=='none'?'':'none';this.innerHTML=this.innerHTML=='Show'?'Hide':'Show';">Show</span>)
        {% endifnotequal %}
    </p>
    <table id="debugQueryTable" style="display: none;">
        <col width="1"></col>
        <col></col>
        <col width="1"></col>
        <thead>
        <tr>
        <th scope="col">#</th>
        <th scope="col">SQL</th>
        <th scope="col">Time</th>
        </tr>
        </thead>
        <tbody>
        {% for query in sql_queries %}<tr class="{% cycle odd,even %}">
        <td>{{ forloop.counter }}</td>
        <td>{{ query.sql|escape }}</td>
        <td>{{ query.time }}</td>
        </tr>{% endfor %}
        </tbody>
    </table>
    </div>
{% endif %}

Django代码片段:模板查询调试

2

有一个项目几乎满足你所有的需求,除了性能分析之外,那就是非常棒的 django debug toolbar

如果你需要进行标准的性能分析,就得使用 repoze.profile(这意味着你需要在使用像 mod_wsgi 这样的 WSGI 接口运行 Django)。

如果你是个技术狂人,需要调试内存泄漏,可以使用 dozer(这也是一个 WSGI 组件)。

3

三个字:Django调试工具栏

撰写回答