Repository: 3cn-ecn/nantralPlatform

Issue:
Pages lentes
Certaines pages sont un peu lentes à charger:
- liste des clubs

C'est peut-être lié au grand nombre d'images, il faudrait étudier la possibilité de cacher ces images.


Discussion:
Elles sont déjà en cache en fait. La lenteur est dû aux requêtes faites à la BDD et au triage des clubs par asso/clubs BDA/BDE/BDS. J'ai essayé d'améliorer la rapidité en faisant le tri directement sur la BDD plutôt que dans le template (ce qui était fait avant) avec une PR avant-hier, mais c'est pas mieux
Justement je pense faudrait cacher la requete faite à la BDD
Je sais pas du tout si c'est faisable mais ça serait top effectivement. Après faudra voir comment gérer les mises à jour de la page (clubs qui changent de nom, de logo, ou quand on s'ajoute dans un club)
Sinon je pensais charger les clubs avec du React, comme ça tu vois les clubs se charger au fur-et-à-mesure et ta page se charge tout de suite, c'est moins énervant pour l'utilisateur (un peu comme facebook en fait)
Et je me pose la question aussi du fait qu'on envoie une liste de queryset au template, et je me demande si lors de l'envoi au template il extrait tous les champs de la base de données (il convertit les queryset en liste du coup), ou si il fait les sélections dans la BDD après directement dans le template
> ou si il fait les sélections dans la BDD après directement dans le template

Normalement c'est ce qui se passe, tout est lazyload au maximum
Actuellement les logos de clubs semblent être tous chargés d'un coup sur la page "Club & assos", ce qui ralentit très fortement l'accès à cette page. Les charger en asynchrone pourrait considérablement améliorer la navigation de ce côté et améliorer l'expérience utilisateur :) 
Retour de CEM

Resolving patch:
diff --git a/server/apps/club/views.py b/server/apps/club/views.py
--- a/server/apps/club/views.py
+++ b/server/apps/club/views.py
@@ -2,8 +2,7 @@
 from django.contrib.auth.mixins import LoginRequiredMixin
 from django.urls import resolve
 
-from apps.club.models import Club, BDX
-from apps.group.models import Group
+from apps.club.models import Club
 from apps.group.views import BaseDetailGroupView
 
 from apps.utils.slug import *
@@ -12,24 +11,18 @@ class ListClubView(TemplateView):
     template_name = 'club/list.html'
 
     def get_context_data(self, **kwargs):
-        context = {'club_list': [] }
-        try:
-            context['club_list'].append({
-                'grouper': "Mes Clubs et Assos",
-                'list': Club.objects.filter(members__user=self.request.user).only('name', 'slug', 'logo', 'bdx_type'),
-            })
-        except Exception:
-            pass
-        club_list = Club.objects.all().select_related('bdx_type').only('name', 'slug', 'logo', 'bdx_type')
-        context['club_list'].append({
-            'grouper': "Associations",
-            'list': club_list.filter(bdx_type__isnull=True)
-        })
-        for bdx in BDX.objects.all():
-            context['club_list'].append({
-                'grouper': f'Clubs {bdx.name}',
-                'list': club_list.filter(bdx_type=bdx),
-            })
+        context = {'club_list': {} }
+        clubList = {}
+        allMembersClub = Club.objects.filter(members__user=self.request.user).only('name', 'slug', 'logo', 'bdx_type')
+        for club in allMembersClub:
+          clubList.setdefault("Mes Clubs et Assos", []).append(club)
+        allClubs = Club.objects.all().select_related("bdx_type").only('name', 'slug', 'logo', 'bdx_type')
+        for club in allClubs:
+          if(club.bdx_type is None):
+            clubList.setdefault("Associations", []).append(club)
+          else:
+            clubList.setdefault(f'Clubs {club.bdx_type.name}', []).append(club)
+        context['club_list']=clubList
         return context
 
 


Test patch: