I'v profilato mia app in diverse situazioni e mi si avvicinò con la conclusione che il mio collo di bottiglia è la resa del modello, esempio discaricaDjango: Attivazione del modello di caricatore cache
61323 function calls (59462 primitive calls) in 0.827 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.827 0.827 /home/haki/src/CalcSite/calc/views.py:279(home)
1 0.000 0.000 0.815 0.815 /usr/local/lib/python2.7/dist-packages/django/shortcuts/__init__.py:31(render)
3/1 0.000 0.000 0.814 0.814 /usr/local/lib/python2.7/dist-packages/django/template/loader.py:151(render_to_string)
4/1 0.000 0.000 0.808 0.808 /usr/local/lib/python2.7/dist-packages/django/template/base.py:136(render)
5/1 0.000 0.000 0.808 0.808 /usr/local/lib/python2.7/dist-packages/django/template/base.py:133(_render)
286/1 0.002 0.000 0.808 0.808 /usr/local/lib/python2.7/dist-packages/django/template/base.py:836(render)
714/2 0.000 0.000 0.808 0.404 /usr/local/lib/python2.7/dist-packages/django/template/debug.py:76(render_node)
1 0.000 0.000 0.808 0.808 /usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py:100(render)
6 0.000 0.000 0.803 0.134 /usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py:48(render)
Secondo il docs abilitazione cache i modelli possono avere un effetto significativo sulle prestazioni. Così ho provato ad aggiungere questa impostazione
TEMPLATE_LOADERS = (
('django.template.loaders.cached.Loader', (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)),
)
Tutti i miei modelli sono in app/templates
. Non sto usando troppo i frammenti del template mach \ includes e tutti i miei tag app (~ 4) sono thread-safe. Guardando la traccia di db in questa sessione ho ottenuto 6 query che ritornano in 9ms: non è il hold up.
Non vedo alcuna differenza nei rapporti sul rendimento. Mi manca qualcosa qui? Sto provando male?
Stai l'ordinamento per ctime quindi se i tag di template stanno facendo nulla di significativo (come l'accesso al database) sarà incluso. L'ultima riga del tuo elenco (il blocktag.render) esegue il rendering di altre sezioni del modello in un albero come la moda, quindi includerà tutte le altre. Dare un elenco completo dei profili e potremmo essere in grado di vedere dove il problema è – dalore