我的Django应用程序非常慢,我想弄明白什么需要时间:
我尝试了Django-debug-toolbar
,但无法找到可以让我分解加载时间的面板。
我的要求:
可以django-debug-toolbar
这样做吗? [什么小组? ]
任何其他可以做到这一点的django-app?
答案 0 :(得分:15)
您可以尝试使用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的自述文件中;这就是为什么我首先回答这个问题。
编辑:如果您使用的是django-debug-toolbar v1.0及更高版本,则该面板已重命名为debug_toolbar.panels.profiling.ProfilingPanel
,现在已在此处记录http://django-debug-toolbar.readthedocs.org/en/1.0/panels.html#non-default-built-in-panels。它默认情况下仍未启用。
答案 1 :(得分:11)
最后找到了一种方法来描述我的django webapp:
以下2个django片段提供middleware
概述整个流程和输出if
请求在prof
中有GET keys
:
http://djangosnippets.org/snippets/727/ [使用cProfile]
简单简单的描述 - 节省了我的一天!
答案 2 :(得分:2)
我建议改为编写一些集成测试,或者至少使用内置的测试客户端来自动化请求并在视图中放入大量的调试语句
Django有一个内置的测试客户端:
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})
自动执行请求并在您进行小的更改时能够一次又一次地复制它们是您改进代码的方法。如果您测量运行每个功能所需的时间,则可以计算出CPU时间。在实际咀嚼资源的部分,不需要花很长时间磨练。
答案 3 :(得分:2)
它没有分析,但我通常只是使用一个视图来计算执行时间,它也适用于那些视图 需要用户登录,它在一个简单的页面中显示执行时间
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})
我认为这是一个好的开始,希望它会帮助某人
答案 4 :(得分:0)
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
然后,您可以在Internet浏览器中浏览到/silk
,以找到在那里请求的页面。