Development #26139
lenteur sur une page avec des sources de données (Python) + conditions de sortie + condition d'entrée sur la page suivante
0%
Description
(vu avec Brice)
Cas d'un formulaire assez classique avec 2 pages:- une première page avec deux champs liste, avec source de données en formule Python, genre
[{"id":"1","text":"un"},{"id":"2","text":"deux"}]
- une condition de sortie qui vérifie un truc, n'importe lequel
- une condition d'entrée sur la page suivante, n'importe laquelle
Quand on va cliquer sur "suivant" sur la première page, ça prend autour de 5 secondes. Si on passe sur des listes classiques sans source de donnée, on tombe sur moins d'une seconde.
Ma perception, la lenteur viendrait du (re)calcul des sources de données puis des conditions de page, nécessitant le calcul des variables de substitution ; peut-être plusieurs fois (?).
En dehors de l'arrivée des calculs "lazy" qui améliorera sans doute l'affaire, regarder si le calcul des variables de substitution est fait plusieurs fois, s'il est caché et/ou cachable, etc. ie chercher ce qu'on peut optimiser.
(à noter que les sources de données Python comme celle indiquée ci-dessus sont utilisées parce qu'on a pas (encore) la possibilité de poser des id dans les listes cf #7467)
Fichiers
Historique
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Priorité changé de Normal à Bas
Analyse à faire mais pour moi il est plus important de permettre de créer ce genre de simples listes depuis w.c.s. (j'ai changé la mention de ticket, pour en pointer un ouvert) et d'utiliser du django lazy.
Mis à jour par Frédéric Péters il y a plus de 5 ans
Analyse à faire
Et il serait donc pas mal d'avoir une URL, ou un export du formulaire en question, les sources de données, etc. (parce que cinq secondes, c'est beaucoup de calculs).
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Nouveau à Information nécessaire
Mis à jour par Thomas Noël il y a plus de 5 ans
- Assigné à mis à Brice Mallet
Brice, si tu l'as dans un coin, je sais même plus où c'était...
Mis à jour par Emmanuel Cazenave il y a plus de 5 ans
Pas 5 secondes mais quand même une "lenteur" tout à fait perceptible par rapport au même formulaire sans source de données pour les champs 'cimetière concerné' et 'votre demande est elle' :
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Fichier carte-d-acces-en-vehicule-cimetiere-copie-de-emmanuel.wcs carte-d-acces-en-vehicule-cimetiere-copie-de-emmanuel.wcs ajouté
En voici une copie ici, mais déjà le formulaire avait été modifié. (et même pas sûr, l'URL ne correspondait pas).
Les sources de données associées :- cimetieres-emmanuel : [(1, 'un'), (2, 'deux')]
- type-demande-cimetiere-emmanuel : [(0, 'nouveau'), (1, 'renouvellement')]
Mis à jour par Frédéric Péters il y a plus de 5 ans
"analyse" autour de :
def test_perfs_data_source_conditions(pub): FormDef.wipe() formdef = FormDef() formdef.name = 'Foo' formdef.fields = [ fields.PageField(id='0', label='1nd page', type='page', post_conditions=[ {'condition': {'type': 'python', 'value': 'form_var_bar and not is_in_backoffice'}}, ]), fields.ItemField(type='item', id='1', label='Bar', varname='bar', data_source={'type': 'foobar'} #data_source={'type': 'formula', 'value': repr( [(1, 'un'), (2, 'deux')])} #items=['un', 'deux'], ), fields.PageField(id='2', label='2nd page', type='page', condition={'type': 'python', 'value': 'form_var_bar and not is_in_backoffice'}), ] formdef.store() NamedDataSource.wipe() data_source = NamedDataSource(name='foobar') data_source.data_source = {'type': 'formula', 'value': repr( [(1, 'un'), (2, 'deux')])} data_source.store() app = get_app(pub) resp = app.get('/foo/') t0 = time.time() resp = resp.form.submit('submit') t = time.time() - t0 for i in range(10): formdef.fields.append(fields.FileField(id='%s' % (5+i), label='file%s' % i)) formdef.store() app = get_app(pub) resp = app.get('/foo/') t0 = time.time() resp = resp.form.submit('submit') t_larger_form = time.time() - t0 print t_larger_form, t
(best of three)
- formulaire avec moins de champs,
- éléments de liste directs : 0.056
- éléments de liste via data source : 0.064
- éléments de liste via python direct : 0.057
- formulaire avec plus de champs (dix champs fichiers en plus),
- éléments de liste directs : 0.146
- éléments de liste via data source : 0.151
- éléments de liste via python direct : 0.151
Bref, selon le type pour les options, il n'y a pas de différence notable (je ne mets pas tous les résultats, mais il y a une grande variation dans les résultats, une autre exécution et l'ordre aurait été différent)
Mais il y a augmentation du temps de traitement selon la taille du formulaire.
Rien d'approchant cinq secondes quand même.
Je laisse le soin de partir de ça, ou pas, pour réaliser davantage de mesures.
Mis à jour par Frédéric Péters il y a 10 mois
- Statut changé de Information nécessaire à Fermé
- Planning mis à Non
Pas plus d'infos et si c'était lié à Python c'est obsolète.