Projet

Général

Profil

Development #16300

cellule json : rendu direct quand le json est dans le cache

Ajouté par Frédéric Péters il y a presque 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
12 mai 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Lié à Combo - Development #15043: Permettre à l'usager/agent de gérer en frontoffice le contenu / la position de certaines cellules (tableau de bord)Fermé17 février 2017

Actions
Lié à Combo - Bug #16308: permettre à get_templated_url de gérer des contextes imbriquésFermé13 mai 2017

Actions

Révisions associées

Révision 96ab51d1 (diff)
Ajouté par Frédéric Péters il y a presque 7 ans

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.

Historique

#1

Mis à jour par Frédéric Péters il y a presque 7 ans

#2

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é
#3

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 ?

#4

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 ailleurs not(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.

#5

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é
#6

Mis à jour par Frédéric Péters il y a presque 7 ans

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.

#7

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)

#8

Mis à jour par Frédéric Péters 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

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é).

#9

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.

#10

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.
#11

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

Formats disponibles : Atom PDF