Contrôle des avatars #42

Closed
opened 2019-12-17 09:23:59 +01:00 by Darks · 2 comments
Owner

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 2019-12-17 09:23:59 +01:00
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 ?
Author
Owner

Va pour ça o/

Va pour ça o/
Darks closed this issue 2019-12-22 15:10:03 +01:00
Sign in to join this conversation.
No description provided.