2009-04-25 2 views
3

J'ai une vue d'admin qui contient quatre clefs étrangères chacune avec quelques milliers d'entrées. Il est lent à apparaître dans le navigateur.Pourquoi django est-il lent à générer des boîtes de sélection pour les clés étrangères?

Si je change le modèle django pour éliminer les boîtes de sélection en ajoutant raw_id_fields, les choses deviennent agréables et accrocheuses. Donc, la lenteur est due à la population des listes déroulantes et c'est aussi un problème connu puisque c'est pourquoi raw_id_fields existe.

Je voudrais comprendre ce qui cause la lenteur. Sur le serveur, si je fais une requête SQL pour les données qui sont utilisées pour remplir les boîtes de sélection, les résultats sont instantanés. Postgres récupérant ou triant les données n'est donc pas la cause.

Peut-être que c'est le temps qu'il faut pour transférer les données remplissant les listes déroulantes? Ou est-ce quelque chose que django fait?

Répondre

8

Le transfert d'énormes listes de sélection prend un peu de temps. Le balisage peut vraiment commencer à additionner. Essayez de vérifier la taille en Ko/Mo de votre sortie html. Je me souviens d'avoir vu une liste de sélection (quelques 1000 entrées) gonfler une page jusqu'à 5 mégaoctets lors d'un travail précédent. C'était sur un projet ASP.NET; Peu importe le cadre que vous utilisez lorsque vous avez un problème comme celui-ci. Je ne sais pas si l'outil d'administration django peut le faire, mais il semble que vous ayez vraiment besoin d'une liste de sélection multi-niveaux pour explorer les résultats, plutôt que d'envoyer toutes les options au client en même temps.

+1

C'est 600 Ko, donc ça a l'air de pouvoir l'expliquer. Merci. – Mitch

1

La première chose à faire est d'implémenter gzip sur votre site, cela réduira la taille des réponses au moins de moitié. Ensuite, s'il est encore très lent, pensez à un type de widget de suggestion automatique ajax pour gérer la sélection de la bonne valeur. On dirait qu'il existe déjà des solutions documentées pour cela: http://www.google.com/#hl=en&q=django+autocomplete+widget&btnG=Google+Search&aq=1&oq=django+autocomplete+widget&fp=jFFhzb_S4-4

Questions connexes