update - python make matplotlib faster



Django ist sehr langsam (1)

(Anscheinend bin ich nicht "karmisch" genug, um Kommentare zu posten, oder ich würde dies als Kommentar anstatt als Antwort posten)

Können Sie näher erläutern, was Sie unter "NUR zwischengespeicherte Abfragen" verstehen?

Abgesehen davon scheint mir Ihr Problem, dass Sie Ihre Datenbank beim Template-Rendering stark treffen.

{% for p in posts %}
 --{{p.by.username}} {# 1 #}
 --{{p.text}}
 {% cache 600 p p.timestamp %}
    {% for img in p.images.all %} {# 2 #}
      --{{img.path}}
    {% endfor %}
 {% endcache %}
{% endfor %}

Sie stellen Ihrer Vorlage "Posts" zur Verfügung; Das ist eine Abfrage, von der Sie gesagt haben, dass sie 100 Ergebnisse enthält.

Für jede Iteration über Posts treffen Sie dann die Datenbank auf {# 1 #} , um p.by zu erhalten, was ich als Fremdschlüssel zu einem authentischen Benutzer ansehe.

Bei einem ungültigen Cache (erster Lauf) drücken Sie die Datenbank erneut bei {# 2 #} , um die Liste der Bilder dieses Posts zu erhalten.

Bei 100 Elementen treffen Sie also die Datenbank 201 mal pro Anfrage für einen ersten Lauf und 101 mit einem gefüllten Cache für die Bilderschleife.

Versuchen Sie, select_related mit Ihrer Posts-Abfrage zu verwenden, um diese zusätzlichen Ergebnisse nach Möglichkeit in die eine Abfrage zu übernehmen. Etwas wie posts = Post.objects.select_related('by', 'images').filter(...) könnte den Trick machen, obwohl ich weiß, dass select_related Grenzen hat, wenn es um die Umkehrung von Fremdschlüsseln und m2m Feldern geht arbeiten für die Bilder, abhängig von Ihrer Modellstruktur).

Bei einigen Profilergebnissen wird das Rendern von Vorlagen als Täter angezeigt. (Ich versuche eine Seite mit NUR zwischengespeicherten Abfragen.) Trotzdem ist die Vorlage sehr einfach. Der komplexeste Teil ist eine verschachtelte Schleife, die 10 Mal ausgeführt wird, aber wenn alles gut läuft, wird die verschachtelte Schleife nicht ausgeführt, weil sie zwischengespeichert wird. (wie in meiner Prüfung)

das ist

{% for p in posts %}
 --{{p.by.username}}
 --{{p.text}}
 {% cache 600 p p.timestamp %}
    {% for img in p.images.all %}
      --{{img.path}}
    {% endfor %}
 {% endcache %}
{% endfor %}

Ich bekomme ~ 80 req / s auf dem Dev. Server für diese Seite. (Ich habe herausgefunden, dass ich diese Zahl in der production deploy mit 3 multiplizieren kann). Für einen Vergleich erhalte ich 1000 req / s für eine triviale Vorlage, die nur eine kurze statische Zeichenkette enthält.

Ist das ein bekanntes Problem? Wie gehe ich vor, es zu korrigieren / zu vermeiden?





django-templates