optimisation #294

Open
opened 2025-01-31 00:58:09 +01:00 by jmtrivial · 4 comments
Owner
  • utiliser defer() ou only() (voire exclude()) sur les vues mois, semaine, upcoming.
  • revoir l'aggrégation par catégorie dans la vue par mois
  • ajouter un cache pour le filtre
  • basculer dans une approche plus dynamique (charger l'interface et les données séparément)
- utiliser defer() ou only() (voire exclude()) sur les vues mois, semaine, upcoming. - revoir l'aggrégation par catégorie dans la vue par mois - ajouter un cache pour le filtre - basculer dans une approche plus dynamique (charger l'interface et les données séparément)
jmtrivial added the
modélisation
label 2025-01-31 00:58:09 +01:00
jmtrivial changed title from optimisation requêtes to optimisation 2025-01-31 01:11:45 +01:00
Author
Owner
  • regarder l'empreinte mémoire
  • pré-calculer ce qui est possible
  • traiter les cas particuliers (événements récurrents) à part pour alléger le traitement des autres événements
  • ne pas charger ce qui est inutile
  • est-ce qu'on fait 7 requêtes puis traitements plus simples plutôt qu'une seule requête puis répartition dans les jours ?
- regarder l'empreinte mémoire - pré-calculer ce qui est possible - traiter les cas particuliers (événements récurrents) à part pour alléger le traitement des autres événements - ne pas charger ce qui est inutile - est-ce qu'on fait 7 requêtes puis traitements plus simples plutôt qu'une seule requête puis répartition dans les jours ?
jmtrivial referenced this issue from a commit 2025-01-31 20:14:18 +01:00
jmtrivial referenced this issue from a commit 2025-01-31 20:14:18 +01:00
jmtrivial referenced this issue from a commit 2025-01-31 20:14:18 +01:00
jmtrivial referenced this issue from a commit 2025-01-31 20:14:18 +01:00
Author
Owner

Réflexions sur une approche python+cache+js pour les pages semaine, mois, journées, événements "en même temps":

  • le cache se fait par jour, avec un seul critère: connecté ou non
  • on enregistre en cache une structure de données où tout a été pré-calculé pour chaque événement d'une journée, en plus de ses informations native. Par exemple : l'événement est dupliqué s'il dure plusieurs jours (il apparait dans chaque journée) ou s'il est récurrent, on stocke la distance du lieu à chaque ville pouvant servir au filte, présence d'un TW, texte + lien associé au lieu
  • quand une page est chargée, on lui sert le contenu en cache (est-ce qu'on le transforme en html ou on le laisse en json, à voir)
  • si on l'a livré en json, le javascript ajoute les éléments dans le DOM
  • le javascript filtre les données en ne gardant que les événements correspondant aux critères du filtre
  • si le cache est vieux, au moment de générer la page, le backend demande à celery de mettre à jour le cache
  • si le cache était vieux, le javascript envoie une requête au serveur pour récupérer les versions mises à jour (quand elles seront prêtes)

Mise à jour du cache :

  • le cache a une durée de vie "infinie"
  • À chaque fois qu'on modifie un événement, on demande à celery de refabriquer le cache des jours où il apparaît.
  • À la fin de chaque processus d'import automatique, on met à jour le cache des jours concernés (attention, on ne le fait pas pour chaque événement ajouté)

L'avantage du json :

  • c'est le même pour toutes les pages, donc un seul cache
    L'inconvénient du json :
  • il y a de la génération de html côté client
Réflexions sur une approche python+cache+js pour les pages semaine, mois, journées, événements "en même temps": - le cache se fait par jour, avec un seul critère: connecté ou non - on enregistre en cache une structure de données où tout a été pré-calculé pour chaque événement d'une journée, en plus de ses informations native. Par exemple : l'événement est dupliqué s'il dure plusieurs jours (il apparait dans chaque journée) ou s'il est récurrent, on stocke la distance du lieu à chaque ville pouvant servir au filte, présence d'un TW, texte + lien associé au lieu - quand une page est chargée, on lui sert le contenu en cache (est-ce qu'on le transforme en html ou on le laisse en json, à voir) - si on l'a livré en json, le javascript ajoute les éléments dans le DOM - le javascript filtre les données en ne gardant que les événements correspondant aux critères du filtre - si le cache est vieux, au moment de générer la page, le backend demande à celery de mettre à jour le cache - si le cache était vieux, le javascript envoie une requête au serveur pour récupérer les versions mises à jour (quand elles seront prêtes) Mise à jour du cache : - le cache a une durée de vie "infinie" - À chaque fois qu'on modifie un événement, on demande à celery de refabriquer le cache des jours où il apparaît. - À la fin de chaque processus d'import automatique, on met à jour le cache des jours concernés (attention, on ne le fait pas pour chaque événement ajouté) L'avantage du json : - c'est le même pour toutes les pages, donc un seul cache L'inconvénient du json : - il y a de la génération de html côté client
Collaborator
  • ok pour la granularité du cache à l’évènement, côté transfert j’imagine que c’est le serveur qui compresse pour le transfert ?
  • pour la mise à jour du cache au process d’import automatique, la maille jour c’est par commodité plutôt que d’avoir un flag par évènement ?
  • pour l’inconvénient de la génération html, c’est par principe ou tu as une raison en tête ? (les terminaux sont quand même puissants maintenant)
- ok pour la granularité du cache à l’évènement, côté transfert j’imagine que c’est le serveur qui compresse pour le transfert ? - pour la mise à jour du cache au process d’import automatique, la maille jour c’est par commodité plutôt que d’avoir un flag par évènement ? - pour l’inconvénient de la génération html, c’est par principe ou tu as une raison en tête ? (les terminaux sont quand même puissants maintenant)
Author
Owner

https://ejs.co/ <- utilisé par les amis du temps des cerises, intéressant

https://ejs.co/ <- utilisé par les amis du temps des cerises, intéressant
Sign in to join this conversation.
No description provided.