2009-04-25 7 views
3

Ich habe eine Admin-Ansicht, die vier Fremdschlüssel mit jeweils einigen tausend Einträgen enthält. Es erscheint langsam im Browser.Warum erstellt Django langsam Auswahlfelder für Fremdschlüssel?

Wenn ich das Django-Modell ändern, um die Auswahlfelder zu entfernen, indem ich raw_id_fields hinzufüge, werden die Dinge nett und bissig. Die Langsamkeit ist also auf die Population der ausgewählten Drop-Downs zurückzuführen und auch dies ist ein bekanntes Problem, da raw_id_fields deshalb existiert.

Ich würde gerne verstehen, was die Langsamkeit verursacht. Wenn ich auf dem Server eine SQL-Abfrage für die Daten durchführe, die zum Ausfüllen der Auswahlfelder verwendet werden, werden die Ergebnisse sofort angezeigt. So ist das Abrufen oder Sortieren der Daten durch Postgres nicht die Ursache.

Vielleicht ist es die Zeit, die es dauert, die Daten zu übertragen, die die Dropdowns füllen? Oder ist es etwas, das Django macht?

Antwort

8

Die Übertragung großer Auswahllisten dauert ziemlich viel Zeit. Das Markup kann wirklich beginnen, sich zu addieren. Versuchen Sie zu überprüfen, wie groß in KB/MB Ihre HTML-Ausgabe ist. Ich erinnere mich, wenn ich einmal eine Auswahlliste (einige 1000 Einträge) gesehen habe, blies eine Seite bis zu 5 oder so Megabyte bei einem vorherigen Job auf. Dies war in einem ASP.NET-Projekt; Es spielt keine Rolle, welchen Rahmen Sie verwenden, wenn Sie ein solches Problem haben.

Ich bin mir nicht sicher, ob das Django-Admin-Tool dies tun kann, aber es klingt wie Sie brauchen wirklich eine mehrstufige Auswahlliste, um Ergebnisse zu durchforsten, anstatt jede Option auf einmal an den Client zu senden.

+1

Es ist 600KB, also sieht es so aus, könnte es erklären. Vielen Dank. – Mitch

1

Das erste, was zu tun ist, implementieren gzip auf Ihrer Website das wird die Größe der Antworten mindestens in zwei Hälften schneiden.

Dann, wenn es immer noch sehr langsam ist, vielleicht in eine Art von Ajax Auto-vorschlagen Typ Widget zu behandeln, die Auswahl der richtigen Wert. Sieht so aus, als gäbe es einige dokumentierte Lösungen dafür: http://www.google.com/#hl=en&q=django+autocomplete+widget&btnG=Google+Search&aq=1&oq=django+autocomplete+widget&fp=jFFhzb_S4-4

Verwandte Themen