#83 Récupérer la liste des membres par API

Open
opened 2 months ago by Darks · 3 comments
Darks commented 2 months ago
Owner

La génération de la page /admin/membres est très longue. ~10 à 15 secondes en local pour ~15000 membres, alors que mon PC a des perfs largement supérieures au VPS.

Après test, il s'avère que le bottleneck est la génération du template.

{% for user in users %}
	<tr><td><a href="{{ url_for('user_by_id', user_id=user.id) }}" title="Page de profil publique de {{ user.name }}">{{ user.name }}</a></td>
			<td style="color: {{ 'red' if not user.email_confirmed else 'inherit' }};">{{ user.email }}</td>
			<td style="text-align: center">{{ user.register_date | date('%Y-%d-%d') }}</td>
			<td>{% for g in user.groups %}
				<span style="{{ g.css }}">{{ g.name }}</span>
				{{ ', ' if not loop.last }}
				{% endfor %}</td>
			<td>{% for priv in user.special_privileges() %}
				<code>{{ priv }}</code>
				{{- ', ' if not loop.last }}
				{% endfor %}</td>
			<td style="text-align: center"><a href="{{ url_for('adm_edit_account', user_id=user.id) }}">Modifier</a></td>
	</tr>
{% endfor %}
# +10 secondes
{% for user in users %}
	A			
{% endfor %}
        
# <1 seconde

L'idée est donc de générer via un endpoint API une liste de membres (format JSON), de l'envoyer au client, et de laisser ce dernier la mettre en forme et la filtrer.

On devrait ainsi avoir des perfs plus correctes.

La génération de la page `/admin/membres` est très longue. ~10 à 15 secondes en local pour ~15000 membres, alors que mon PC a des perfs largement supérieures au VPS. Après test, il s'avère que le bottleneck est la génération du template. ``` {% for user in users %} <tr><td><a href="{{ url_for('user_by_id', user_id=user.id) }}" title="Page de profil publique de {{ user.name }}">{{ user.name }}</a></td> <td style="color: {{ 'red' if not user.email_confirmed else 'inherit' }};">{{ user.email }}</td> <td style="text-align: center">{{ user.register_date | date('%Y-%d-%d') }}</td> <td>{% for g in user.groups %} <span style="{{ g.css }}">{{ g.name }}</span> {{ ', ' if not loop.last }} {% endfor %}</td> <td>{% for priv in user.special_privileges() %} <code>{{ priv }}</code> {{- ', ' if not loop.last }} {% endfor %}</td> <td style="text-align: center"><a href="{{ url_for('adm_edit_account', user_id=user.id) }}">Modifier</a></td> </tr> {% endfor %} # +10 secondes ``` ``` {% for user in users %} A {% endfor %} # <1 seconde ``` L'idée est donc de générer via un endpoint API une liste de membres (format JSON), de l'envoyer au client, et de laisser ce dernier la mettre en forme et la filtrer. On devrait ainsi avoir des perfs plus correctes.
Darks added the
performance
label 2 months ago
Poster
Owner

Oh, intéressant. Le template est limitant... ma première réaction était surtout de paginer dans le panel admin. Ultimement si on a n'a pas de JS on reste coincés sur l'affichage (on peut demander à nos admins d'avoir du JS à la limite, mais pas à tout le monde).

Oh, intéressant. Le template est limitant... ma première réaction était surtout de paginer dans le panel admin. Ultimement si on a n'a pas de JS on reste coincés sur l'affichage (on peut demander à nos admins d'avoir du JS à la limite, mais pas à tout le monde).
Darks commented 2 months ago
Poster
Owner

C'est ce qu'on s'est dit avec Eragon :

  • le panel admin est réservé aux admins, on peut leur demander d'avoir Js actif pour utiliser ce bout
  • la liste en tant que telle est inutile, c'est le filtrage qui lui donne tout son potentiel, donc Js là aussi
  • le json sera peut-être plus adapté pour le filtrage/affichage
C'est ce qu'on s'est dit avec Eragon : - le panel admin est réservé aux admins, on peut leur demander d'avoir Js actif pour utiliser ce bout - la liste en tant que telle est inutile, c'est le filtrage qui lui donne tout son potentiel, donc Js là aussi - le json sera peut-être plus adapté pour le filtrage/affichage
Poster
Owner

Bah écoute ACK pour ça, je vois pas de raisons de s'embêter.

Bah écoute ACK pour ça, je vois pas de raisons de s'embêter.
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.