Development #16300
cellule json : rendu direct quand le json est dans le cache
0%
Description
Pour le moment on passe systématiquement par du rendu via ajax pour les cellules json, on pourrait faire un rendu direct quand la donnée est dans le cache. (inconvénient : ça fait l'erreur 500 sur toute la page en cas de soucis)
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-misc-render-json-directly-on-page-if-it-s-in-cache-1.patch 0001-misc-render-json-directly-on-page-if-it-s-in-cache-1.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a presque 7 ans
- Lié à Development #15043: Permettre à l'usager/agent de gérer en frontoffice le contenu / la position de certaines cellules (tableau de bord) ajouté
Mis à jour par Thomas Noël il y a presque 7 ans
J'imagine que c'est nécessaire pour #15043, mais sinon je trouve que c'est mieux de faire de l'async au niveau de la perception des choses par le client (la page se charge très vite avant de compléter les rendus dedans). Je peux me tromper, en fait ça dépend aussi de la lourdeur éventuelle de certaines cellules, de leur nombre, etc.
Allez, disons "pourquoi pas".
Le bool dans bool('synchronous' not in context)
ne me semble pas nécessaire. On fait partout ailleurs not(context.get('synchronous'))
, en imaginant un jour un synchronous posé à False ou None, ça serait préférable.
J'ai pas compris le try/except ValueError ajouté sur template_vars.update(context.flatten())
: c'est dans quel cas ?
Et pour faire ch**r, un test ?
Mis à jour par Frédéric Péters il y a presque 7 ans
Thomas Noël a écrit :
J'imagine que c'est nécessaire pour #15043, mais sinon je trouve que c'est mieux de faire de l'async au niveau de la perception des choses par le client (la page se charge très vite avant de compléter les rendus dedans). Je peux me tromper, en fait ça dépend aussi de la lourdeur éventuelle de certaines cellules, de leur nombre, etc.
Non, pas de rapport particulier avec #15043, c'est juste qu'à l'usage, pour des données peu volatiles (genre les horaires de la mairie), avoir le rendu asynchrone est quand même une perte de temps.
Allez, disons "pourquoi pas".
On peut aussi ajouter un force_async = True dans la classe JsonCellBase, overridable dans ConfigJsonCell.
Le bool dans
bool('synchronous' not in context)
ne me semble pas nécessaire. On fait partout ailleursnot(context.get('synchronous'))
, en imaginant un jour un synchronous posé à False ou None, ça serait préférable.
Ok.
J'ai pas compris le try/except ValueError ajouté sur
template_vars.update(context.flatten())
: c'est dans quel cas ?
Un vrai RequestContext ne semble pas supporter le .flatten(), je retrouverai une trace.
Et pour faire ch**r, un test ?
Sûr.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Lié à Bug #16308: permettre à get_templated_url de gérer des contextes imbriqués ajouté
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-misc-add-force_async-option-to-render-json-directly-.patch 0001-misc-add-force_async-option-to-render-json-directly-.patch ajouté
Patch repris sous forme de l'ajout d'une option force_async (à True par défaut, pour ne pas changer le comportement); l'option permet à ConfigJsonCell de dire qu'elle peut faire son rendu de manière synchrone si la donnée est dans le cache.
Tests présents.
Mis à jour par Thomas Noël il y a presque 7 ans
Pour être super tatasse il pourrait y avoir un test qui montre que quand le cache est vide, force_async=False est rusé et passe par un NothingInCache
Aussi, ça me dérangerait pas de mettre force_async à False par défaut : on n'utilise pas encore beaucoup de cellules JSON : autant leur donner cette intelligence maintenant ?
Enfin, ajouter force_async dans la configuration de JsonCell (un BooleanField ça doit suffire)
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-misc-add-force_async-option-to-render-json-directly-.patch 0001-misc-add-force_async-option-to-render-json-directly-.patch ajouté
Pour être super tatasse il pourrait y avoir un test qui montre que quand le cache est vide, force_async=False est rusé et passe par un NothingInCache
Fait, nécessité de pousser le mock un peu plus haut dans la pile mais ça marche sans soucis. (en passant, #16316)
Aussi, ça me dérangerait pas de mettre force_async à False par défaut : on n'utilise pas encore beaucoup de cellules JSON : autant leur donner cette intelligence maintenant ?
J'avais cru comprendre que tu n'étais pas favorable (en lisant "la page se charge très vite avant de compléter les rendus dedans"). Modifié.
Enfin, ajouter force_async dans la configuration de JsonCell (un BooleanField ça doit suffire)
Voilà.
À noter qu'avec ce patch on pourrait retirer une série de synchronous: True des tests de cellule json (je n'y ai pas touché).
Mis à jour par Thomas Noël il y a presque 7 ans
Frédéric Péters a écrit :
J'avais cru comprendre que tu n'étais pas favorable (en lisant "la page se charge très vite avant de compléter les rendus dedans"). Modifié.
J'ai changé d'avis. L'essentiel c'est que ça reste débrayable (force_async=true) pour les cellules qui pourraient mettre du temps à se calculer même en présence d'un cache. Bon, ça arrivera jamais sans doute.
Et donc, ack.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Statut changé de En cours à Résolu (à déployer)
Avec un nouveau message de commit pour correspondre aux derniers échanges.
commit 96ab51d1d0e181fefd1f53a98e955844a353c851 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri May 12 13:48:47 2017 +0200 misc: add force_async option, to force asynchronous rendering of json (#16300) The new default behaviour is to render directly in page if the json data is already in cache.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: add force_async option, to force asynchronous rendering of json (#16300)
The new default behaviour is to render directly in page if the json data
is already in cache.