Optimisations overpass : `meta` fait x100 sur le temps de réponse
publié le , mis à jourJe remarque qu'en cliquant sur un lieu, la requête overpass inclut les metadonnées.
@etienneJr je crois qu'on avait identifié que c'était trop lent, et qu'on avait séparé ça en deux requêtes. @pmiossec tu as bossé le sujet récemment, ça te dit quelque chose ?
laem
J'ai l'impression que c'est cette PR qui a introduit cette régression. Enfin je crois que c'est une régression.
laem
En partant du constat fait à l'époque que demander les metas fait passer la requête de quelques centaines de ms à 2 secondes, il y a plusieurs scénarios :
- la requête meta occupe beaucoup overpass, donc faut les éviter / les décaler / les optimiser
- la requête meta n'implique pas une consommation d'overpass, elle est juste lente mais pas grave, c'est pour une partie annexe de la fiche donc on la fait en douce
laem
Je confirme que sans les meta, on est à 200 ms en moyenne, sensation d'instantanéité. Donc c'est 10x plus rapide sans meta.
etienneJr
@laem wrote in https://codeberg.org/cartes/web/issues/1982#issuecomment-12880935:
J'ai l'impression que c'est cette PR qui a introduit cette régression. Enfin je crois que c'est une régression.
ah mince, quand j'ai posté mon commentaire sur #1976, j'étais focalisé sur le fait que le déploiement avant merdé, j'ai pas fait attention que ça réactivait les metadonnées. Mais ça n'explique pas les lenteurs qu'on a avec overpass depuis 1 semaine, car le déploiement a eu lieu il y a 36h.
pmiossec
@laem wrote in https://codeberg.org/cartes/web/issues/1982#issue-4276248:
@pmiossec tu as bossé le sujet récemment, ça te dit quelque chose ?
Ah, ben justement, oui, c'est ce que j'ai fait...et exprès 😅 Y'avait plusieurs requêtes à overpass (sans et avec meta) et je les aient changées pour qu'elles demandent toutes les meta (en cachant la promesse) pour qu'au final 1 seule requête soit faite.
Je ne sais pas si c'est car le serveur était à la ramasse mais les 2 requêtes mettaient sensiblement le même temps (en tout cas, negligeable pour les meta --mais p-ê que c'est parce que le serveur l'avait en cache...--).
Donc ça me semblait une bonne idée de ne faire qu'une seule requête étant donné que de tout façon on faisait celle avec les meta.
Donc tu es en train de me dire que ce qui est bon pour overpass n'est pas bon pour l'UX dans cartes... P-ê qu'il faudrait cacher 2 requêtes (avec et sans meta) alors...
laem
Donc tu es en train de me dire que ce qui est bon pour overpass n'est pas bon pour l'UX dans cartes...
Oui c'est ça. Overpass mettait 20 ms + 2s, maintenant il met 2s. Mais l'utilisateur attend 2 s pour voir sa fiche lieu, avant il la voyait en 20ms.
Je parle côté client : côté serveur, on demande les meta direct pour justement renseigner les meta web qui donne la date de création du lieu, pour le SEO. Pas gégé, ça ralentit la première réponse.
P-ê qu'il faudrait cacher 2 requêtes (avec et sans meta) alors...
Oui, mais normalement c'est fait par le navigateur non ? Je suis étonné que tu aies eu besoin de le faire à la main en manipulant fetch. Normalement il suffit de mettre le bon header de cache pour que ce soit caché nativement, plutôt qu'en JS, non ?
laem
je viens d'y penser : on fait une requête overpass pour afficher les points sur la carte des résultats de recherche. Mais je viens de véririfer, elle est unique et très rapide.
laem
Je garde ce sujet ouvert, car il reste un gros sujet sur le meta. Il est lent ce qui a plusieurs conséquences :
- occuper le serveur overpass pour presque rien
- retarder l'affichage final de la fiche lieu côté client
- retarder le début de la réponse de la fiche lieu côté serveur, de 2 secondes, très très mauvaise pour le SEO.
Mais les meta restent très importantes. J'ai posé la question à plusieurs endroits :