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.
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).
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
Puisqu'en en parlait tout à l'heure je me demande quand même s'il y a pas juste un truc pathologique dans la recherche des groupes qui ne provoque pas un nombre déraisonnable de requêtes SQL. Il est possible que formuler le template autrement et/ou charger explicitement les données à l'avance aille sensiblement plus vite.
Puisqu'en en parlait tout à l'heure je me demande quand même s'il y a pas juste un truc pathologique dans la recherche des groupes qui ne provoque pas un nombre déraisonnable de requêtes SQL. Il est possible que formuler le template autrement et/ou charger explicitement les données à l'avance aille sensiblement plus vite.
Darks et Breizh préfèrent filtrer sur le serveur (avec un format typé, et renvoyer du JSON). Ça m'est égal mais j'irai pas le coder, et il vaudrait mieux que ce soit assez factorisé pour pouvoir filtrer aussi des tables de topics, programmes, etc... sans avoir à tout recoder.
Darks et Breizh préfèrent filtrer sur le serveur (avec un format typé, et renvoyer du JSON). Ça m'est égal mais j'irai pas le coder, et il vaudrait mieux que ce soit assez factorisé pour pouvoir filtrer aussi des tables de topics, programmes, etc... sans avoir à tout recoder.
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.
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.
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).
C'est ce qu'on s'est dit avec Eragon :
Bah écoute ACK pour ça, je vois pas de raisons de s'embêter.
Puisqu'en en parlait tout à l'heure je me demande quand même s'il y a pas juste un truc pathologique dans la recherche des groupes qui ne provoque pas un nombre déraisonnable de requêtes SQL. Il est possible que formuler le template autrement et/ou charger explicitement les données à l'avance aille sensiblement plus vite.
Darks et Breizh préfèrent filtrer sur le serveur (avec un format typé, et renvoyer du JSON). Ça m'est égal mais j'irai pas le coder, et il vaudrait mieux que ce soit assez factorisé pour pouvoir filtrer aussi des tables de topics, programmes, etc... sans avoir à tout recoder.