#42 Contrôle des avatars

Closed
opened 7 months ago by Darks · 2 comments
Darks commented 7 months ago

Pour les avatars, je pensais faire un système plus propre, à coup d'id stocké en BDD, et permettant d'éviter les problèmes de cache quand on le modifie.

Grossièrement, on ajoute une colonne avatar_id: int dans la représentation d'un membre.

Pour afficher l'avatar d'un membre, pas grand chose qui change, si ce n'est qu'on sert le fichier {user.avatar_id}.png au lieu de {user.id}.png.

Pour le modifier/l'ajouter, on modifie la valeur avatar_id à User.query.max(User.avatar_id) + 1.

Par défaut la valeur est à 0, ce qui permet d'éviter d'aller tester si le fichier existe en mémoire comme maintenant (meilleures perfs) et d'éviter le cas d'initialisation où personne n'a modifié son avatar.

Si l'utilisateur modifie son avatar, la valeur va donc passer de 31 à 37 par exemple, et donc tous les navigateurs vont redemander le nouvel avatar. On peut donc mettre un entête Cache-Control très long, puisqu'on a la certitude que le couple (avatar, id) ne changera jamais.

Pour les avatars, je pensais faire un système plus propre, à coup d'id stocké en BDD, et permettant d'éviter les problèmes de cache quand on le modifie. Grossièrement, on ajoute une colonne `avatar_id: int` dans la représentation d'un membre. Pour afficher l'avatar d'un membre, pas grand chose qui change, si ce n'est qu'on sert le fichier `{user.avatar_id}.png` au lieu de `{user.id}.png`. Pour le modifier/l'ajouter, on modifie la valeur `avatar_id` à `User.query.max(User.avatar_id) + 1`. Par défaut la valeur est à 0, ce qui permet d'éviter d'aller tester si le fichier existe en mémoire comme maintenant (meilleures perfs) et d'éviter le cas d'initialisation où personne n'a modifié son avatar. Si l'utilisateur modifie son avatar, la valeur va donc passer de 31 à 37 par exemple, et donc tous les navigateurs vont redemander le nouvel avatar. On peut donc mettre un entête `Cache-Control` très long, puisqu'on a la certitude que le couple (avatar, id) ne changera jamais.
Darks added the
proposal
label 7 months ago
Lephenixnoir commented 7 months ago
Owner

Concernant “tester si l'avatar existe” ça n'a pas vraiment de coût ajouté, c'est même entièrement dans Nginx. Mais l'histoire de rechargement est un bon argument.

Pourquoi pas {user.id}_{avatar_id}.* pour garder la tracabilité des utilisateurs ?

Concernant "tester si l'avatar existe" ça n'a pas vraiment de coût ajouté, c'est même entièrement dans Nginx. Mais l'histoire de rechargement est un bon argument. Pourquoi pas `{user.id}_{avatar_id}.*` pour garder la tracabilité des utilisateurs ?
Darks commented 7 months ago
Owner

Va pour ça o/

Va pour ça o/
Darks referenced this issue from a commit 6 months ago
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
Cancel
Save
There is no content yet.