Bug #46854
perf rendu /inspect (clés _live_)
0%
Description
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 3 ans
A priori pas lié à cette nouvelle section (un for x in formdata.iter_target_datas(): print(x)
de test est tout à fait rapide).
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Sujet changé de perf rendu /inspect (parce que demandes et fiches liées ?) à perf rendu /inspect (clés _live_)
- Assigné à mis à Frédéric Péters
En faisant
print('[%.2f] getting flat keys' % (time.time() - t0), file=fd) keys = substvars.get_flat_keys() print('[%.2f] getting flat keys -- done' % (time.time() - t0), file=fd) print('[%.2f] iterating on flat keys' % (time.time() - t0), file=fd) for k in sorted(keys): [...] print('[%.2f] iterating on flat keys -- done' % (time.time() - t0), file=fd)
Ça donne :
[0.08] getting flat keys [9.57] getting flat keys -- done [9.57] iterating on flat keys [22.12] iterating on flat keys -- done
Mon idée est maintenant de regarder dans les clés live, qui parfois s'enchainent (ex: form_var_fiche_senior_live_var_conjoint_senior_live_role_editeur_des_quotas_emails), sans elles, ça se passe ainsi :
[0.08] getting flat keys [0.34] getting flat keys -- done [0.34] iterating on flat keys [0.62] iterating on flat keys -- done
(mesuré en retirant le "live" du inspect_keys)
Vu que dans le live il y a chargement carddef + carddata,
carddef = CardDef.get_by_urlname(self._field.data_source['type'][8:]) carddata = carddef.data_class().get(self.raw)
ça n'est au final pas bien surprenant.
Il y aurait moyen de faire un get_request().live_card_cache à l'image des datasources_cache et wscalls_cache, avec '%s-%s' % (self._field.data_source['type'], self.raw) comme clé, pour voir.
Mis à jour par Frédéric Péters il y a plus de 3 ans
[0.07] getting flat keys [0.77] getting flat keys -- done [0.77] iterating on flat keys [1.43] iterating on flat keys -- done
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-perf-cache-live-access-data-during-request-46854.patch 0001-perf-cache-live-access-data-during-request-46854.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Ces mesures avec le patch attaché (toutes les mesures effectuées sur wcs.node1.test).
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-perf-cache-live-access-data-during-request-46854.patch 0001-perf-cache-live-access-data-during-request-46854.patch ajouté
(adaptation test)
Mis à jour par Thomas Noël il y a plus de 3 ans
Je vois bien que cette partie du code fonctionne :
# cache during request if not hasattr(request, 'live_card_cache'): request.live_card_cache = {} cache_key = '%s-%s' % (self._field.data_source['type'], self.raw) carddata = request.live_card_cache.get(cache_key) if carddata is not None: if isinstance(carddata, Exception): raise carddata return LazyFormData(carddata)
mais peut-être que je suis trop vieux, j'aurais ajouté un else au cas où le cache n'est pas encore là, comme :
# cache during request cache_key = '%s-%s' % (self._field.data_source['type'], self.raw) if not hasattr(request, 'live_card_cache'): request.live_card_cache = {} else: carddata = request.live_card_cache.get(cache_key) if carddata is not None: if isinstance(carddata, Exception): raise carddata return LazyFormData(carddata)
Ensuite concernant le test il y a un truc qui m'échappe : il fonctionne aussi très bien sans cache... Que teste-t-on exactement en demandant deux fois context['form_var_foo_live_name'] ?
Mis à jour par Frédéric Péters il y a plus de 3 ans
Ensuite concernant le test il y a un truc qui m'échappe : il fonctionne aussi très bien sans cache...
Oui, c'est qu'idéalement il y aurait mock/whatever et pouvoir vérifier qu'il n'y a pas d'appel, mais au final trop galère.
Mis à jour par Frédéric Péters il y a plus de 3 ans
Modification poussée dans la branche + aussi mock dans le test (pour juste la partie KeyError en fait ça va) pour voir que get_by_urlname n'est pas appelé la seconde fois.
Mis à jour par Thomas Noël il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit eff8a6cb48d9826e62706bc497cd32ac92acbfef Author: Frédéric Péters <fpeters@entrouvert.com> Date: Mon Sep 21 20:01:41 2020 +0200 perf: cache live access data during request (#46854)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
perf: cache live access data during request (#46854)