Development #77252
divers performance inspect
Début:
03 mai 2023
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Non
Planning:
Non
Description
En partant du cas particulier de #77066, une demande dont la vue /inspect est inaccessible à cause de timeout, quelques recherches.
1/
- mesure de substvars.get_flat_keys(), base de départ : 37 secondes
- masse de requêtes SQL répétées pour les rôles (plusieurs centaines), via get_workflow_roles_substitution_variables(),
- en neutralisant cette fonction (remplacée par un
return {}
), la durée passe à 30 secondes - sans doute facile d'ajouter un petit cache par requête à la fin de get_workflow_roles_substitution_variables
- en neutralisant cette fonction (remplacée par un
2/
- on part du dernier point, mais avec cProfile.Profile() activé, base de départ (overhead du profiling) : 46 secondes
- temps cumulé : 7 secondes sur get_default_workflow (un cache pourrait être ajouté ici, ne pas reconstruire l'objet 9846 fois)
3/
- temps cumulé : 33 secondes sur iter_evolution_parts, qui est appelé 89479× sur le formdata (+ quelques dizaines de fois sur des fiches liées)
- la plupart de ces appels viennent de wcs/wf/form.py, LazyFormDataWorkflowForms.__getattr__
- il y aurait à garder en cache les noms d'attribut possible, avec ça le temps cumulé ici passe à 5,5 secondes,
def __getattr__(self, varname): wfform_formdatas = [] + if '_varnames' in self.__dict__: + varnames = self.__dict__['_varnames'] + if varname not in varnames: + raise AttributeError(varname) + else: + self.__dict__['_varnames'] = varnames = set() for part in self._formdata.iter_evolution_parts(): if not isinstance(part, WorkflowFormEvolutionPart): continue + varnames.add(part.varname) if part.varname == varname and part.data: wfform_formdatas.append(LazyFormDataWorkflowFormsItem(part, base_formdata=self._formdata)) if wfform_formdatas: return LazyFormDataWorkflowFormsItems(wfform_formdatas) raise AttributeError(varname)
Tout ça mis ensemble les 37 secondes doivent pouvoir descendre à moins de 10 secondes.
Révisions associées
storage: add simple caching (#77252)
formdef: also cache default workflow (#77252)
Historique
Mis à jour par Robot Gitea il y a 12 mois
- Statut changé de Nouveau à En cours
Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/287
- Titre : WIP: divers perfs pour l'inspect (#77252)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/287/files
Mis à jour par Robot Gitea il y a 12 mois
- Statut changé de Solution proposée à Solution validée
Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a 12 mois
- Statut changé de Solution validée à Résolu (à déployer)
Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/287
- Titre : divers perfs pour l'inspect (#77252)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/287/files
Mis à jour par Transition automatique il y a 12 mois
- Statut changé de Résolu (à déployer) à Solution déployée
perfs: add attribute name cache to lazy workflow form data (#77252)