我的Django应用程序速度极慢,我想找出哪些内容所花费的时间:
我尝试过Django-debug-toolbar
,但无法找到可以给出负载时间的面板。
我的要求:
- 堆栈跟踪类型的输出,显示呈现页面时调用的每个模块的执行时间。
- 我想知道整个页面呈现过程中哪一部分需要更多的时间?
- 而且,哪一部分消耗了多少CPU[最重要的]?
django-debug-toolbar
能做到吗?[哪个面板?]
还有其他的Django应用程序可以做到吗?
我的Django应用程序速度极慢,我想找出哪些内容所花费的时间:
我尝试过Django-debug-toolbar
,但无法找到可以给出负载时间的面板。
我的要求:
django-debug-toolbar
能做到吗?[哪个面板?]
还有其他的Django应用程序可以做到吗?
django-debug-toolbar
2.0默认情况下,django-debug-toolbar
2.0在设置DEBUG_TOOLBAR_PANELS
中包括'debug_toolbar.panels.profiling.ProfilingPanel'
。您可以勾选工具栏中的“Profiling”复选框并刷新页面来查看此分析信息。
django-debug-toolbar
的旧版本:您可以尝试使用django-debug-toolbar的分析面板(请确保使用应用程序从github下载的最新版本)。在您的settings.py文件中这样启用该面板:
DEBUG_TOOLBAR_PANELS = (
'debug_toolbar.panels.version.VersionDebugPanel',
'debug_toolbar.panels.timer.TimerDebugPanel',
'debug_toolbar.panels.profiling.ProfilingDebugPanel',
)
django-debug-toolbar的自述文件中未记录此面板的存在;这就是我首先在此处回答的原因。
profile
和pstats
模块,因为它们具有非自由许可证(感谢迪士尼)。 - Tony终于找到一种方法来对我的 Django Web 应用进行分析:
以下 2 个 Django 代码片段提供了一个 middleware
来分析整个流程,并且在请求的 GET keys
中有 prof
参数时输出结果:
http://djangosnippets.org/snippets/727/ [ 使用 cProfile ]
http://djangosnippets.org/snippets/186/ [ 使用 hotshot ]
非常简单易懂的分析 - 救了我的一天!
from django.test.client import Client
c = Client()
response = c.post('/slow_url/')
然后在您的视图中:
def slow_url(request):
start = time.time()
print 'Started db query'
result = SomeComplexModel.objects.all()
print 'Finished db query, took ', time.time() - start
return render('some_complex_template.html', {'result': result})
这并不是基于个人偏好,而是通常我会使用一个视图来计算执行时间,它也适用于需要用户登录的视图,并在一个简单的页面中显示执行时间。
def test(request):
from django.test.client import Client
import time
c = Client()
#client login if needed
response = c.post('/login/', {'username': 'admin', 'password': 'password'})
start = time.time()
response = c.get('/pagetotest/')
#print response
#print 'Finished, time: ', time.time() - start # output to console
end=time.time() - start
return render(request,'loadingtime.html',{'time':end})
我认为这是一个良好的起点,希望它能对某些人有所帮助。
django-silk 可以帮助你。
pip install django-silk
settings.py
中添加:MIDDLEWARE = [
...
'silk.middleware.SilkyMiddleware',
...
]
INSTALLED_APPS = (
...
'silk'
)
urls.py
中添加路由:urlpatterns += [url(r'^silk/', include('silk.urls', namespace='silk'))]
python manage.py makemigrations
python manage.py migrate
然后您可以在浏览器中浏览/silk
,以找到所请求的页面。
Django-debug-toolbar
,但它并不能满足我的需求! - Yugal Jindle