10
105
Fork
You've already forked web
30

Optimiser la rapidité de chargement des lieux et du blog #1366

Open
opened 2025年12月28日 17:18:33 +01:00 by laem · 39 comments
Owner
Copy link

C'est pas ouf d'après Google.

image

Je crois que notre browserlist est trop tolérant, je vais tester autre chose.

image

C'est pas ouf d'après Google. ![image](/attachments/49fbfa72-37e1-4ede-8169-8c67152f04f1) Je crois que notre browserlist est trop tolérant, je vais tester autre chose. ![image](/attachments/e0568148-64e8-4f2f-9bd7-568438b33b1f)
100 KiB
119 KiB
Author
Owner
Copy link

OK c'est mimeux pour l'immage d'en-tête pour le LCP, mais il reste des choses à faire.
image

OK c'est mimeux pour l'immage d'en-tête pour le LCP, mais il reste des choses à faire. ![image](/attachments/970d5f97-1040-4f63-9246-f405f6ae7860)
146 KiB
Author
Owner
Copy link

@etienneJr on a un gros boulot à faire pour accélérer le rendu de la carte. C'est limitant pour la perf SEO.
J'ai fait quelques trucs dans une PR que je mets en ligne, mais la carte ça restera le truc problématique. Bon c'est pas cata non plus hein ;)
image

@etienneJr on a un gros boulot à faire pour accélérer le rendu de la carte. C'est limitant pour la perf SEO. J'ai fait quelques trucs dans une PR que je mets en ligne, mais la carte ça restera le truc problématique. Bon c'est pas cata non plus hein ;) ![image](/attachments/59a4e024-df34-4fe7-b7eb-f83547a13b1a)
145 KiB
laem changed title from (削除) Optimiser la rapidité de chargement du blog (削除ここまで) to Optimiser la rapidité de chargement des lieux et du blog 2025年12月29日 16:42:56 +01:00
Author
Owner
Copy link

J'ai tenté de supprier l'élément Meteo, qui est le LCP, mais ça change rien : le titre du lieu devient alors le LCP à 2 secondes.

image

Or le LCP global est de 11 secondes, et sur l'écran on voit que seule la carte MapLibre bouge entre les deux derniers rendus : les icônes apparaissent.
Donc j'en conclus qu'il faut accélérer le rendu Maplibre

image

J'ai tenté de supprier l'élément Meteo, qui est le LCP, mais ça change rien : le titre du lieu devient alors le LCP à 2 secondes. ![image](/attachments/6f2a2309-f2dc-4f07-a190-7c8ad5da7911) Or le LCP global est de 11 secondes, et sur l'écran on voit que seule la carte MapLibre bouge entre les deux derniers rendus : les icônes apparaissent. Donc j'en conclus qu'il faut accélérer le rendu Maplibre ![image](/attachments/9731b377-ea7c-416e-bb20-52205ec5b2a6)
Author
Owner
Copy link

Bon j'en ai marre de la logique que j'ai introduite pour l'asynchrone /bulk. Je vais le passer en local.

Bon j'en ai marre de la logique que j'ai introduite pour l'asynchrone /bulk. Je vais le passer en local.
Author
Owner
Copy link

@etienneJr j'ai découvert que pour une fiche lieu comme un restau, la route /bulk était appelée 20 fois pour un chargement neuf de l'app, sans cache.

Haha 😅

Corrigé ici :
#1377

En échange, quand on travaille sur les icônes, il faudra faire bun run pack-icons à chaque changement.

@etienneJr j'ai découvert que pour une fiche lieu comme un restau, la route /bulk était appelée 20 fois pour un chargement neuf de l'app, sans cache. Haha 😅 Corrigé ici : https://codeberg.org/cartes/web/pulls/1377 En échange, quand on travaille sur les icônes, il faudra faire bun run pack-icons à chaque changement.
Author
Owner
Copy link

Il reste encore pleeeeeein d'optims à faire.

Il reste encore pleeeeeein d'optims à faire.
Author
Owner
Copy link

Par exemple, suite à la traduction des tags cuisine dans la liste des noeuds similaires, la page fait 200 appels à https://dev.cartes.app/api/tag-translations?tags=***

https://cartes.app/?allez=Mirlitantouille|n1302023838|-1.6855|48.1115#18/48.111586/-1.685454

Par exemple, suite à la traduction des tags cuisine dans la liste des noeuds similaires, la page fait 200 appels à https://dev.cartes.app/api/tag-translations?tags=*** https://cartes.app/?allez=Mirlitantouille|n1302023838|-1.6855|48.1115#18/48.111586/-1.685454
Author
Owner
Copy link

J'observe également que les tuiles semblent peu rapides. C'est vrai que j'ai jamais optimisé la fourniture des pmtiles !

J'observe également que les tuiles semblent peu rapides. C'est vrai que j'ai jamais optimisé la fourniture des pmtiles !
Author
Owner
Copy link

J'ignorais que le navigateur par défaut ne peut faire que 6 connexions simultanées à un serveur. Nos pmtiles saturent donc serveur.Cartes.app et les translation tags saturent cartes.app ! À corriger.

image

J'ignorais que le navigateur par défaut ne peut faire que 6 connexions simultanées à un serveur. Nos pmtiles saturent donc serveur.Cartes.app et les translation tags saturent cartes.app ! À corriger. ![image](/attachments/11e8bf47-192f-496c-96b9-963be9013638)

@laem wrote in #1366 (comment):

la route /bulk était appelée 20 fois pour un chargement neuf de l'app, sans cache

Bah c'est bizarre ça, pourquoi le cache n'est pas utilisé ? Tu parles juste du cas d'un bot de SEO ou du cas général de n'importe quel utilisateur ? Je me souviens qu'on en avait parlé il y a qq mois, tu m'avais dit que c'était pas grave car c'était mis en cache du navigateur, et je crois bien avoir vu après coup que c'était le cas.

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9339926: > la route /bulk était appelée 20 fois pour un chargement neuf de l'app, sans cache Bah c'est bizarre ça, pourquoi le cache n'est pas utilisé ? Tu parles juste du cas d'un bot de SEO ou du cas général de n'importe quel utilisateur ? Je me souviens qu'on en avait parlé il y a qq mois, tu m'avais dit que c'était pas grave car c'était mis en cache du navigateur, et je crois bien avoir vu après coup que c'était le cas.

@laem wrote in #1366 (comment):

En échange, quand on travaille sur les icônes, il faudra faire bun run pack-icons à chaque changement.

OK c'est noté pour le dev en local (et faut que je mette à jour le wiki). Quid pour la prod : c'est fait automatiquement à chaque déploiement ou pas ?

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9339926: > En échange, quand on travaille sur les icônes, il faudra faire bun run pack-icons à chaque changement. OK c'est noté pour le dev en local (et faut que je mette à jour le wiki). Quid pour la prod : c'est fait automatiquement à chaque déploiement ou pas ?

@laem wrote in #1366 (comment):

Nos pmtiles saturent donc serveur.Cartes.app

Je pensais que les appels qui n'ont plus lieu d'être (par exemple une tuile d'un niveau de zoom précédent si on a zoomé très vite) étaient annulés pour éviter de charger des trucs inutiles. Ce qui devrait donc libérer les connexions. C'est parce qu'on appelle plusieurs pmtiles différents ? C'est vrai que si on est dans le coin d'une tuile, ça fait 4 appels par fichier...

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9340334: > Nos pmtiles saturent donc serveur.Cartes.app Je pensais que les appels qui n'ont plus lieu d'être (par exemple une tuile d'un niveau de zoom précédent si on a zoomé très vite) étaient annulés pour éviter de charger des trucs inutiles. Ce qui devrait donc libérer les connexions. C'est parce qu'on appelle plusieurs pmtiles différents ? C'est vrai que si on est dans le coin d'une tuile, ça fait 4 appels par fichier...

@laem wrote in #1366 (comment):

J'ignorais que le navigateur par défaut ne peut faire que 6 connexions simultanées à un serveur

C'est un paramètre réglable par le site web ? Ou seulement par l'utilisateur ?

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9340334: > J'ignorais que le navigateur par défaut ne peut faire que 6 connexions simultanées à un serveur C'est un paramètre réglable par le site web ? Ou seulement par l'utilisateur ?

@laem wrote in #1366 (comment):

Donc j'en conclus qu'il faut accélérer le rendu Maplibre

Est il possible d'identifier que c'est un bot de référencement qui consulte, pour lui envoyer une carte minimale ? (pas d'icônes, pmtiles spécifique hyper léger,...)

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9336491: > Donc j'en conclus qu'il faut accélérer le rendu Maplibre Est il possible d'identifier que c'est un bot de référencement qui consulte, pour lui envoyer une carte minimale ? (pas d'icônes, pmtiles spécifique hyper léger,...)
Author
Owner
Copy link

OK c'est noté pour le dev en local (et faut que je mette à jour le wiki). Quid pour la prod : c'est fait automatiquement à chaque déploiement ou pas ?

Oui, au bun install. J'ai MAJ bun lourdement d'ailleurs sur la prod.

Bah c'est bizarre ça, pourquoi le cache n'est pas utilisé ? Tu parles juste du cas d'un bot de SEO ou du cas général de n'importe quel utilisateur ? Je me souviens qu'on en avait parlé il y a qq mois, tu m'avais dit que c'était pas grave car c'était mis en cache du navigateur, et je crois bien avoir vu après coup que c'était le cas.

Oui, mais un bot de SEO et puis les nouveaux utilisateurs vont se taper 15 chargement du même fichier, plusieurs MO ! C'est parce que les requêtes sont lancées en parallèle, avant que le cache ne soit rempli ! Logique, mais subtil.

> OK c'est noté pour le dev en local (et faut que je mette à jour le wiki). Quid pour la prod : c'est fait automatiquement à chaque déploiement ou pas ? Oui, au bun install. J'ai MAJ bun lourdement d'ailleurs sur la prod. > Bah c'est bizarre ça, pourquoi le cache n'est pas utilisé ? Tu parles juste du cas d'un bot de SEO ou du cas général de n'importe quel utilisateur ? Je me souviens qu'on en avait parlé il y a qq mois, tu m'avais dit que c'était pas grave car c'était mis en cache du navigateur, et je crois bien avoir vu après coup que c'était le cas. Oui, mais un bot de SEO et puis les nouveaux utilisateurs vont se taper 15 chargement du même fichier, plusieurs MO ! C'est parce que les requêtes sont lancées en parallèle, avant que le cache ne soit rempli ! Logique, mais subtil.
Author
Owner
Copy link

C'est un paramètre réglable par le site web ? Ou seulement par l'utilisateur ?

Seulement sur le navigateur. Donc n'y comptons absoluemnt pas ^^

> C'est un paramètre réglable par le site web ? Ou seulement par l'utilisateur ? Seulement sur le navigateur. Donc n'y comptons absoluemnt pas ^^
Author
Owner
Copy link

Est il possible d'identifier que c'est un bot de référencement qui consulte, pour lui envoyer une carte minimale ? (pas d'icônes, pmtiles spécifique hyper léger,...)

Non, Google depuis 10 ans fait tout repérer les diff entre ce qu'on lui sert, et ce qu'on sert aux utilisateurs. Et vu que Google a le contrôle sur 70 % des navigateurs dans le monde, il sait tout.

> Est il possible d'identifier que c'est un bot de référencement qui consulte, pour lui envoyer une carte minimale ? (pas d'icônes, pmtiles spécifique hyper léger,...) Non, Google depuis 10 ans fait tout repérer les diff entre ce qu'on lui sert, et ce qu'on sert aux utilisateurs. Et vu que Google a le contrôle sur 70 % des navigateurs dans le monde, il sait tout.

@laem wrote in #1366 (comment):

Par exemple, suite à la traduction des tags cuisine dans la liste des noeuds similaires, la page fait 200 appels à https://dev.cartes.app/api/tag-translations?tags=***

https://cartes.app/?allez=Mirlitantouille|n1302023838|-1.6855|48.1115#18/48.111586/-1.685454

Je me rappelle plus si c'est exactement dans ce cas précis mais j'avais remarqué que y'a un cache qui ne sert presque pas car les données d'entrée i.e. la clé est unique et donc ne sert veritablement uniquement qu'au refresh. J'avais commencé à ameliorer ça sans le finir car l'api etait pas evidente 🫤
Je verrais si je peux finir...

Et puis je me demande si ce genre de ressources ne pourrait pas etre egalement stockées dans le localstorage. Je ne suis pas sûr que ça evolue beaucoup...

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9340058: > Par exemple, suite à la traduction des tags cuisine dans la liste des noeuds similaires, la page fait 200 appels à https://dev.cartes.app/api/tag-translations?tags=*** > > https://cartes.app/?allez=Mirlitantouille|n1302023838|-1.6855|48.1115#18/48.111586/-1.685454 Je me rappelle plus si c'est exactement dans ce cas précis mais j'avais remarqué que y'a un cache qui ne sert presque pas car les données d'entrée i.e. la clé est unique et donc ne sert veritablement uniquement qu'au refresh. J'avais commencé à ameliorer ça sans le finir car l'api etait pas evidente 🫤 Je verrais si je peux finir... Et puis je me demande si ce genre de ressources ne pourrait pas etre egalement stockées dans le localstorage. Je ne suis pas sûr que ça evolue beaucoup...
Author
Owner
Copy link

Quand on charge ce lieu, la carte se met d'abord au zoom par défaut, puis zoom sur le lieu. C'est lent : ça implique de télécharger les tuiles haut niveau inutiles. Ça pourrit notre score de perf Google.
Sûrement facile à corriger, je regarde.
https://cartes.app/lieu?allez=Le Beaujolais d'Auteuil|n989286977|2.2607|48.8486#15/48.8486/2.26071540
image

Quand on charge ce lieu, la carte se met d'abord au zoom par défaut, puis zoom sur le lieu. C'est lent : ça implique de télécharger les tuiles haut niveau inutiles. Ça pourrit notre score de perf Google. Sûrement facile à corriger, je regarde. https://cartes.app/lieu?allez=Le Beaujolais d'Auteuil|n989286977|2.2607|48.8486#15/48.8486/2.26071540 ![image](/attachments/8ba1c3b3-1e25-4555-8347-b2cb60182bfd)
144 KiB

@laem wrote in #1366 (comment):

Quand on charge ce lieu, la carte se met d'abord au zoom par défaut, puis zoom sur le lieu.

Il arrive qu'on fasse un flyto pour déplacer la carte. Peut-être pas dans ce cas là mais par exemple dans la recherche d'itinéraires. Et si la destination est loin, l'expérience n'est pas bonne. A mon avis, on pourrait améliorer en calculant la distance et mettre l'effet "flyto" uniquement si la distance est courte, sinon désactiver l'effet pour charger directement la destination.

@laem wrote in #1366 (comment):

https://cartes.app/lieu?allez=Le Beaujolais d'Auteuil|n989286977|2.2607|48.8486#15/48.8486/2.26071540

2 petites améliorations liés à ce lien à faire:

  • virer les espaces dans le nom dans l'url car l'expérience est mauvaise (ça lance un recherche sur mobile au lieu d'ouvrir l'url)
  • fixer l'affichage des horaires:
    image
@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9577202: > Quand on charge ce lieu, la carte se met d'abord au zoom par défaut, puis zoom sur le lieu. Il arrive qu'on fasse un flyto pour déplacer la carte. Peut-être pas dans ce cas là mais par exemple dans la recherche d'itinéraires. Et si la destination est loin, l'expérience n'est pas bonne. A mon avis, on pourrait améliorer en calculant la distance et mettre l'effet "flyto" uniquement si la distance est courte, sinon désactiver l'effet pour charger directement la destination. @laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-9577202: > https://cartes.app/lieu?allez=Le Beaujolais d'Auteuil|n989286977|2.2607|48.8486#15/48.8486/2.26071540 2 petites améliorations liés à ce lien à faire: * virer les espaces dans le nom dans l'url car l'expérience est mauvaise (ça lance un recherche sur mobile au lieu d'ouvrir l'url) * fixer l'affichage des horaires: ![image](/attachments/72182bb4-3954-45bd-96f5-5e7cf6cf8f64)
Author
Owner
Copy link

A mon avis, on pourrait améliorer en calculant la distance et mettre l'effet "flyto" uniquement si la distance est courte, sinon désactiver l'effet pour charger directement la destination.

C'est déjà le cas via l'option maxDuration, non ?

2 petites améliorations liés à ce lien à faire:

Oui mais rien à voir avec le ticket présent :p, chaque chose en son temps.

Je vais corriger ce problème de position initiale, c'est pas trivial mais j'ai l'idée. C'est important pour les moteurs de recherche et donc pour nos utilisateurs qui utilisent cartes.app pour la première fois, sans compter les autres.

> A mon avis, on pourrait améliorer en calculant la distance et mettre l'effet "flyto" uniquement si la distance est courte, sinon désactiver l'effet pour charger directement la destination. C'est déjà le cas via l'option maxDuration, non ? > 2 petites améliorations liés à ce lien à faire: Oui mais rien à voir avec le ticket présent :p, chaque chose en son temps. Je vais corriger ce problème de position initiale, c'est pas trivial mais j'ai l'idée. C'est important pour les moteurs de recherche *et donc* pour nos utilisateurs qui utilisent cartes.app pour la première fois, sans compter les autres.
Author
Owner
Copy link

Voilà grâce à !1401 c'est bien mieux, pas de zoom par défaut initial, mais Google ne le voit pas du même oeil, étrange.

image

Voilà grâce à !1401 c'est bien mieux, pas de zoom par défaut initial, mais Google ne le voit pas du même oeil, étrange. ![image](/attachments/a8c9b968-cfec-4f59-8a01-187d83d15263)
131 KiB
Author
Owner
Copy link

Bon sur une fiche sans image, on a clairement quelque chose qui foire car la page semble prête en quelques secondes, ce qui est très cool, alors que Google dit 10 secondes. On voit que sur les captures, rien ne bouge sauf les derniers éléments de la carte comme le marqueur et les icônes... donc le canvas continue d'évoluer, et on dirait que Google attend la fin des changements.

image

Bon sur une fiche sans image, on a clairement quelque chose qui foire car la page semble prête en quelques secondes, ce qui est très cool, alors que Google dit 10 secondes. On voit que sur les captures, rien ne bouge sauf les derniers éléments de la carte comme le marqueur et les icônes... donc le canvas continue d'évoluer, et on dirait que Google attend la fin des changements. ![image](/attachments/f2510958-0814-43c7-84f8-5610c98b1864)
135 KiB
Author
Owner
Copy link

OK je crois que je pige mieux. Les tests sont faits avec une émulation d'un Moto G, donc un vieux téléphone, soit avec les options "processeur 4x plus lent" et "connexion 4G lente" de l'onglet "performances" de chrome. Et alors là en effet, je retrouve la lenteur, les deux premières captures de pagespeed doivent représenter les 10 secondes de LCP !

Donc il faut qu'on réduire la charge réseau, car avec proc / 4 et réseau illimité, le LCP est de 10 secondes. À l'inverse, ça donne 10 secondes, quelle que soit la rapidité du processeur.

C'est ça qu'il faut qu'on optimise, la charge réseau : la carte, Google ne semble finalement pas trop s'en soucier !

OK je crois que je pige mieux. Les tests sont faits avec une émulation d'un Moto G, donc un vieux téléphone, soit avec les options "processeur 4x plus lent" et "connexion 4G lente" de l'onglet "performances" de chrome. Et alors là en effet, je retrouve la lenteur, les deux premières captures de pagespeed doivent représenter les 10 secondes de LCP ! Donc il faut qu'on réduire la charge réseau, car avec proc / 4 et réseau illimité, le LCP est de 10 secondes. À l'inverse, ça donne 10 secondes, quelle que soit la rapidité du processeur. C'est ça qu'il faut qu'on optimise, la charge réseau : la carte, Google ne semble finalement pas trop s'en soucier !
Author
Owner
Copy link

J'ai bien fait de persévérer : l'analyzer marche enfin.

C'est fort en enseignement : le module Panoramax à lui seul fait presque deux fois l’entièreté du code propre à cartes.app.

Je pensais l'avoir relégué à un chargement fainéant, mais non. Ouch.

De même pour ATProto, et idem pour MapLibre. Ce dernier, on pourra pas passer outre, mais ses 500 ko compressés m'étonnent, bundleophobia parle plutôt de 250.... Turf est aussi très gros avec 130 ko compressés.

image

J'ai bien fait de persévérer : l'analyzer marche enfin. C'est fort en enseignement : le module Panoramax à lui seul fait presque deux fois l’entièreté du code propre à cartes.app. Je pensais l'avoir relégué à un chargement fainéant, mais non. Ouch. De même pour ATProto, et idem pour MapLibre. Ce dernier, on pourra pas passer outre, mais ses 500 ko compressés m'étonnent, bundleophobia parle plutôt de 250.... Turf est aussi très gros avec 130 ko compressés. ![image](/attachments/c172aca2-e9e8-47e1-9ae3-b0392612a245)
246 KiB

500 ko compressés m'étonnent

La dernière version fait en effet 260Ko
https://github.com/maplibre/maplibre-gl-js/releases

> 500 ko compressés m'étonnent La dernière version fait en effet 260Ko https://github.com/maplibre/maplibre-gl-js/releases

je vois que le nouveau format MapLibre Tiles est vachement plus léger que les MVT qu'on utilise. Mais je ne sais pas si tilemaker le gèrera un jour ...
https://github.com/maplibre/maplibre-tile-spec?tab=readme-ov-file#comparing-with-mvt

je vois que le nouveau format MapLibre Tiles est vachement plus léger que les MVT qu'on utilise. Mais je ne sais pas si tilemaker le gèrera un jour ... https://github.com/maplibre/maplibre-tile-spec?tab=readme-ov-file#comparing-with-mvt
Author
Owner
Copy link

Ah c'est super intéressant. Car le poids des tuiles et le temps de décompression se fait clairement sentir par l'utilisateur (pas par Google donc). Si Tilemaker ne le fait pas, est-ce que Protomaps ne pourrait pas le faire ? On a une étape de clustering après la génération des pmtiles par Tilemaker.

Ça en parle en décembre ici .
https://github.com/protomaps/PMTiles/pull/596#issuecomment-3594523300

Et ici sur Tilemaker, une conversation très contradictoire https://github.com/systemed/tilemaker/issues/856

Dans tous les cas il faudra qu'on teste une étape de conversion après génération.

Ah c'est super intéressant. Car le poids des tuiles et le temps de décompression se fait clairement sentir par l'utilisateur (pas par Google donc). Si Tilemaker ne le fait pas, est-ce que Protomaps ne pourrait pas le faire ? On a une étape de clustering après la génération des pmtiles par Tilemaker. Ça en parle en décembre ici . https://github.com/protomaps/PMTiles/pull/596#issuecomment-3594523300 Et ici sur Tilemaker, une conversation très contradictoire https://github.com/systemed/tilemaker/issues/856 Dans tous les cas il faudra qu'on teste une étape de conversion après génération.
Author
Owner
Copy link

C'est bizarre, j'ai beau essayer de faire du lazy-loading de Panoramax, next bundle analyzer me l'affiche. J'ai l'impression qu'il plante, car en inspectant le navigateur, ce qui est réellement téléchargé, je vois bien moins de données. À suivre...

C'est bizarre, j'ai beau essayer de faire du lazy-loading de Panoramax, next bundle analyzer me l'affiche. J'ai l'impression qu'il plante, car en inspectant le navigateur, ce qui est réellement téléchargé, je vois bien moins de données. À suivre...
Author
Owner
Copy link

Dans !1401 j'optimise le chargement des composants : StyleChooser, AddComment (Bluesky), TransportMap etc. sont chargés en fainéant. Le Map est séparé du bundle principal. Etc :)

Dans !1401 j'optimise le chargement des composants : StyleChooser, AddComment (Bluesky), TransportMap etc. sont chargés en fainéant. Le Map est séparé du bundle principal. Etc :)

Est-ce qu'on aurait pas interet, pour certaines dépendances assez volumineuses qui sont mises à jour moins souvent que cartes.app est déployé, de ne pas les bundler et d'utiliser un CDN (genre https://www.jsdelivr.com/ )?
Comme cela, elle serait normalement déjà dans le cache du navigateur après une 1ère utilisation (ce qui n'améliorerait sûrement pas la métrique Google mais surement l'UX utilisateur).

Je ne suis pas un expert js et j'aimerais ton point de vue sur cette idée (surtout que a priori avec react les dependences sont plutôt gérées avec un gestionnaire de dépendance)...

Est-ce qu'on aurait pas interet, pour certaines dépendances assez volumineuses qui sont mises à jour moins souvent que cartes.app est déployé, de ne pas les bundler et d'utiliser un CDN (genre https://www.jsdelivr.com/ )? Comme cela, elle serait normalement déjà dans le cache du navigateur après une 1ère utilisation (ce qui n'améliorerait sûrement pas la métrique Google mais surement l'UX utilisateur). Je ne suis pas un expert js et j'aimerais ton point de vue sur cette idée (surtout que a priori avec react les dependences sont plutôt gérées avec un gestionnaire de dépendance)...
Author
Owner
Copy link

Oui il faudrait étudier les gains d'un CDN partagé pour l'utilisateur à sa première connexion. Mais c'est une décision assez lourde en conséquence, parce que qui dit mise en cache, dit mise en commun entre plusieurs sites, et donc tous les problèmes de vie privée qui vont avec. Donc je suis peu motivé pour l'instant.

Quand on sera à l'international, ça aura plus d'intérêt car les CDN permettent aussi de servir le tout depuis un serveur plus proche. Mais on peut facilement faire des fichiers maison servis via CDN sans jsdelivr & co.

Le seul cas pas optimisé, c'est quelqu'un qui aurait chargé maplibre v5.15 sur un autre site avant d'arriver sur cartes.app. Mais concrètement aujourd'hui, dans le périmètre français, je pense qu'on doit être un des plus gros sites à proposer MapLibre, et surtout sa dernière version quasi en temps réel 😅

Oui il faudrait étudier les gains d'un CDN partagé pour l'utilisateur à sa première connexion. Mais c'est une décision assez lourde en conséquence, parce que qui dit mise en cache, dit mise en commun entre plusieurs sites, et donc tous les problèmes de vie privée qui vont avec. Donc je suis peu motivé pour l'instant. Quand on sera à l'international, ça aura plus d'intérêt car les CDN permettent aussi de servir le tout depuis un serveur plus proche. Mais on peut facilement faire des fichiers maison servis via CDN sans jsdelivr & co. Le seul cas pas optimisé, c'est quelqu'un qui aurait chargé maplibre v5.15 sur un autre site avant d'arriver sur cartes.app. Mais concrètement aujourd'hui, dans le périmètre français, je pense qu'on doit être un des plus gros sites à proposer MapLibre, et surtout sa dernière version quasi en temps réel 😅
Author
Owner
Copy link

Voilà, une petite dernière optimisation sur les icônes du menu rapide qu'on chargeait en double par rapport aux icônes de la carte. Ça en fait un paquet, d'optimisations. Je vais m'arrêter là, !1401 est déployée sur https://dev.cartes.app, n'hésitez pas à la tester !

Voilà, une petite dernière optimisation sur les icônes du menu rapide qu'on chargeait en double par rapport aux icônes de la carte. Ça en fait un paquet, d'optimisations. Je vais m'arrêter là, !1401 est déployée sur https://dev.cartes.app, n'hésitez pas à la tester !

en raison de #1369 j'imagine que tes optimisations n'ont pas concerné indoor= ? Tu penses que c'est négligeable ?

en raison de #1369 j'imagine que tes optimisations n'ont pas concerné `indoor=` ? Tu penses que c'est négligeable ?

Faudrait mettre à jour ce ticket avec les même analyses aujourd'hui suite à !1401 et autres optimisations.
Et clôturer si on estime qu'on peut plus faire mieux ?

Faudrait mettre à jour ce ticket avec les même analyses aujourd'hui suite à !1401 et autres optimisations. Et clôturer si on estime qu'on peut plus faire mieux ?
Author
Owner
Copy link

Oui il reste encore plein de choses à faire.

Pour moi l'une des meilleures optimisations qu'on doit faire, c'est de commencer à charger les infos du lieu contenues dans les tuiles, en attendant qu'Overpass réponde. Quand ce dernier va bien et que la 4G est bonne, c'est instantané. Quand c'est pas le cas, ça casse l'expérience alors qu'on pourrait déjà zoomer sur le lieux et en afficher le nom.

Oui il reste encore plein de choses à faire. Pour moi l'une des meilleures optimisations qu'on doit faire, c'est de commencer à charger les infos du lieu contenues dans les tuiles, en attendant qu'Overpass réponde. Quand ce dernier va bien et que la 4G est bonne, c'est instantané. Quand c'est pas le cas, ça casse l'expérience alors qu'on pourrait déjà zoomer sur le lieux et en afficher le nom.
Author
Owner
Copy link

Exemple pratique : là je viens de taper "Paris", et cliquer sur le résultat. Photon nous donne déjà les coordonnées ! Donc le zoom pourrait être immédiat. Les informations complètes d'OSM n'étaient pas très intéressantes ici.

Exemple pratique : là je viens de taper "Paris", et cliquer sur le résultat. Photon nous donne déjà les coordonnées ! Donc le zoom pourrait être immédiat. Les informations complètes d'OSM n'étaient pas très intéressantes ici.

@laem wrote in #1366 (comment):

je viens de taper "Paris", et cliquer sur le résultat. Photon nous donne déjà les coordonnées ! Donc le zoom pourrait être immédiat.

Sur ce genre de cas, c'est la géométrie de la relation qui alourdit fortement la réponse overpass, non ?
Mais à part ça oui très bonne idée d'utiliser les coordonnées présentes dans photon.

@laem wrote in https://codeberg.org/cartes/web/issues/1366#issuecomment-15630161: > je viens de taper "Paris", et cliquer sur le résultat. Photon nous donne déjà les coordonnées ! Donc le zoom pourrait être immédiat. Sur ce genre de cas, c'est la géométrie de la relation qui alourdit fortement la réponse overpass, non ? Mais à part ça oui très bonne idée d'utiliser les coordonnées présentes dans photon.
Author
Owner
Copy link

Oui c'est possible. Mais là tu vois en bonne 4G et/ou photon dispo, c'est presque instantané de taper Paris et de le charger.

Oui c'est possible. Mais là tu vois en bonne 4G et/ou photon dispo, c'est presque instantané de taper Paris et de le charger.
Sign in to join this conversation.
No Branch/Tag specified
master
abostats
SynchroM-master
gps
embeddings
lysios-patch-5
lysios-patch-4
lysios-patch-3
lysios-patch-2
lysios-patch-1
abo-serveur2
clim
zone-en-favori
categories_toujours_visibles
rechercher_ici_avant_resultats
test-2365
panoramax-contribution
add-categories-validations
gel-bug-prod
osm-note-2
broken
wikidata_booking
fuse7.3
lysios-patrimoine-3
gps2
atproto-fix-2
styles-secondaires-mais-maison
atproto-scopes
itineraire-printemps-2026
modal-sheet-5.6
nlnet-cost-climate-perf
pb-icones-religieux
couvoiture
etiennejr-patch-2
meteo-fainéante
logo-static-url
poc-page-vitrine
remove-compass
test-reproduce-1795
display-cycleway-lanes-2
poc-image
add-media-condition
mapterhorn
test-indoor-equal
outdoors-VS-indoorEqual
hiking-colors
fix-blog-typing
poc-next-international
fix-map-style-modal-not-closing
i18n
hide-odd-zoom-levels
filter_categories
resume_wikipedia
deplacement_bouttons
fix-1095
mobile_permettre_selection
position-carte-initiale
dégradé-icônes
better_wikipedia
affichage_donnees_wikidata
mobile-permettre-selection
avis-details
perf-seo
modal-sheet-5
plans-novembre
display-cycleway-lanes
fix-1227
fix-1234
etiennejr-patch-1
update-1240
fix-1236
fix-1131
photon-search-street
fix-1221
article-avis
net-haut-zoom
baies-moins-visibles
belles-fiches-lieu
fix-1157
bug-page-vie-privée
use-watername
fix-1176
carte-du-onde
fix-1166
page-news
tchou
add-icon-alias
vitesse
photon-opensearch
private-in-italic
bâtiments-3D
merge-categories
handle-private-highway
improve-findcategory
injection-pmtiles
fix-1128
check-icons
update-readme
category-rugby
bug-position-carte-vs-lieu
limites-vitesse
improve-find-category-from-tags-v2
integrer
document-osmfeature
translate-document
velo-fin-aout-25
velo-ete-2025
moins-de-maptiler
planet-pmtiles-tilemaker
fix-1048
panoramax-leger
plume
horaires-i18n
planet
maj-deps-juillet-2025
improve-find-category-from-tags
bug-encart
interactions-encart-mobile
clic-on-station
fix-1028
fix-1014
edit
add-big-rivers
add-shortbread-tiles
handle-deleted-osm-elements-v2
codeberg
improve-useEffect
immoloc
update-dashboard
analyze
terradraw
sombre2
calendar
poi-sprites-using-svg
style-sombre
sprites
annuaire
motis-gtfs-attributes
next-styled-components
dev
cool2
cool
panoramax-angle
env-static-urls
borders-only
panoramax2
intelligence
debug-iles
nouveau-serveur
france-protomaps
turbo
fouss/cartes-#338
blog2
legislatives
presentation
pas-de-geoloc-si-hash-different
protomaps
vaul
carte-trains
citiz
maj-paquets
icones
ui2
bblog
voyagevoyage
test-image-origine
bugimagefin
searchParams
voyage
avion
perf
studio
piscine
journée
année
journée-transition
score-dès-acceuil
fix-space-problem
rebase-5août
correspondance
règles-séparées
indeps-acre
demo
indeps
indeps-cachés
indication-temps-plein
indeps-refactor-simulations
indeps-vue-comparaison
indeps-inversion
barème-continu
indeps-démo
textes-branches-sécu
engine-enum
2019
transport
publicodes
as
infrance-nouvelle-landing
better-translation
co2
simplifATMP
controle-SMIC
webi18n
bug-avantages-en-nature
revert-352-infrance-navigation-v2
laem-patch-1
robots.txt
improve-perf
iframe-bugfix
quickfixes
lib
irsimple
hiringinfrance.com
dégradé
refstate
johan
zrr
logo-interactif
revert-216-improve-tracking
redesign2
zrr2
fixtrad
correction-salaire-brut
petit-state
alien-consolidate
translate-ui
npm
alien-brut-net
translatable
différent
ir18
fix-typo
add-tracking
fix-collect-missing
défauts-partout
fix-double-unfold-three
fix-double-unfold
versement-transport
blocker-questions
v3
v2.1
v2
v1
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
0.7.0
v0.5.1
v0.5.0
v0.4.2
v0.4.1
v0.4.0
v0.3.3
v0.3.2
v0.3.1
v0.3
v0.2
v0.1-cdd-alpha
v0-démo-tag-nav
Labels
Clear labels
🎨 Design
À propos de l'interface et de l'UX
💡 Idée
Nouvelle feature à intégrer
question
Further information is requested
🌍 OSM
À propos de l'affichage et l'édition des éléments OSM
🌱 Amélioration
Amélioration/fix de l'existant
🐞 Bug
Something isn't working
📊 SEO
📋 Catégories
À propos des catégories de recherche et de l'annuaire
📖 Wiki
📝Avis
A propos de la fonction avis et de bluesky
📢 Oyez
📷 Photos
A propos des photos (sources, affichage)
🔍Recherche
A propos de la barre de recherche et de photon
🔥 Actuel
🔧 tech
🖌 Styles
Styles de la carte
🧝i18n
🧪 R&D
🚍 Transports
🚙 Voiture
🚨Prioritaire
Ticket à traiter rapidement
🚲Vélo
Cartes
climat
Communication
demo
Cette branche doit être déployée comme une démo
dependencies
Pull requests that update a dependency file
javascript
Pull requests that update javascript code
Pas urgent
Plein-air
Tuiles
Verso
Vieux
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cartes/web#1366
Reference in a new issue
cartes/web
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?