2014-07-26 14 views
5

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?

+0

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

risposta

5

Il caricatore di modello memorizzato nella cache deve ancora eseguire il rendering dei modelli. I risparmi derivano dal non aver letto il modello di nuovo dal filesystem ogni volta, salvando IO.

Se si desidera memorizzare nella cache il modello, esaminare i tag del modello {% cache%}. Ma sappi che devi includere le chiavi corrette.

+0

FYI dai documenti di Django: "Modificato in Django 1.11: L'abilitazione automatica del caricatore di template nella cache quando il debug è False è stata aggiunta." – colins44

4

Da Django 1.8+ ora inserisce nel OPTIONS block of the TEMPLATES setting.

+0

FYI, la sintassi per questo è abbastanza diversa da ciò che l'OP stava cercando di utilizzare. Vedere https://docs.djangoproject.com/en/1.10/ref/templates/api/#django.template.loaders.cached.Loader –

Problemi correlati