9
103
Fork
You've already forked web
30

Éviter un crash complet de l'application et remarques générales sur l'interface #1326

Open
opened 2025年12月12日 09:30:19 +01:00 by hverlin · 13 comments

Merci beaucoup pour le travail sur cartes.app. J'aime beaucoup l'idée et je pense qu'une fois que l'application a un mode itinéraire et hors-ligne, elle pourra vraiment remplacer d'autres applications OSM. J'espère qu'un meilleur fond de carte pour le vélo sera développé (j'ai déjà vu quelques tickets à ce sujet), avec par exemple l'intégration des vélos en libre service comme dans la carte de Google.


Quelques remarques générales sur l'interface après avoir utilisé l'application à plusieurs reprises.

Je pense qu'il serait idéal de pas avoir un écran bleu/crash complet de l'interface pour ce type d'application. (comme on peut voir ici : #920 (comment)) Une notification dans un coin (ou au centre) de l'écran peut suffire ? Dans la plupart des cas, je pense que la carte peut s'afficher avec les informations manquantes, par exemple.
(le serveur devrait toujours renvoyer la carte + une erreur si besoin)

J'ai aussi l'impression qu'il manque quelques indications de chargements. C'est particulièrement visible si la connexion internet n'est pas bonne.
Dès qu'un useEffect fait un appel API ou à une promise, je pense que c'est peut-être mieux d'utiliser tanstack-query (ou une autre lib similaire) ? (pas besoin de créer manuellement des états loading dans le code par exemple - https://tkdodo.eu/blog/why-you-want-react-query pour plus d'informations)

On peut aussi se retrouver avec des informations incohérentes dans le panneau latéral si on clique vite par exemple. Je sais pas si le logo de carte.app peut se transformer en une petite icône de chargement s'il se passe quelque chose ?

Un exemple ici où la requête a échoué, mais on a l'impression que c'est toujours en train de charger.
capture d'ecran cartes.app illustrant le propos

Merci beaucoup pour le travail sur cartes.app. J'aime beaucoup l'idée et je pense qu'une fois que l'application a un mode itinéraire et hors-ligne, elle pourra vraiment remplacer d'autres applications OSM. J'espère qu'un meilleur fond de carte pour le vélo sera développé (j'ai déjà vu quelques tickets à ce sujet), avec par exemple l'intégration des vélos en libre service comme dans la carte de Google. --- Quelques remarques générales sur l'interface après avoir utilisé l'application à plusieurs reprises. Je pense qu'il serait idéal de pas avoir un écran bleu/crash complet de l'interface pour ce type d'application. (comme on peut voir ici : https://codeberg.org/cartes/web/issues/920#issuecomment-8858631) Une notification dans un coin (ou au centre) de l'écran peut suffire ? Dans la plupart des cas, je pense que la carte peut s'afficher avec les informations manquantes, par exemple. (le serveur devrait toujours renvoyer la carte + une erreur si besoin) J'ai aussi l'impression qu'il manque quelques indications de chargements. C'est particulièrement visible si la connexion internet n'est pas bonne. Dès qu'un `useEffect` fait un appel API ou à une promise, je pense que c'est peut-être mieux d'utiliser tanstack-query (ou une autre lib similaire) ? (pas besoin de créer manuellement des états `loading` dans le code par exemple - https://tkdodo.eu/blog/why-you-want-react-query pour plus d'informations) On peut aussi se retrouver avec des informations incohérentes dans le panneau latéral si on clique vite par exemple. Je sais pas si le logo de carte.app peut se transformer en une petite icône de chargement s'il se passe quelque chose ? Un exemple ici où la requête a échoué, mais on a l'impression que c'est toujours en train de charger. ![capture d'ecran cartes.app illustrant le propos](/attachments/177d9fda-c83d-4105-8868-313dd18e8e8a)
653 KiB

Merci pour ton retour d'expérience !

@hverlin wrote in #1326 (comment):

Je pense qu'il serait idéal de pas avoir un écran bleu/crash complet de l'interface pour ce type d'application.

Je suis d'accord que c'est un killer. Un utilisateur normal ne reviendra pas sur cartes.app après en avoir eu un. À un moment où certes l'app est encore en développement mais on cherche à étendre notre public il est temps de passer à qqch de plus discret. @laem c'est envisageable ?

Merci pour ton retour d'expérience ! @hverlin wrote in https://codeberg.org/cartes/web/issues/1326#issue-2869023: > Je pense qu'il serait idéal de pas avoir un écran bleu/crash complet de l'interface pour ce type d'application. Je suis d'accord que c'est un killer. Un utilisateur normal ne reviendra pas sur cartes.app après en avoir eu un. À un moment où certes l'app est encore en développement mais on cherche à étendre notre public il est temps de passer à qqch de plus discret. @laem c'est envisageable ?
Owner
Copy link

Pour le sujet des erreurs, c'est à double tranchant : plus l'erreur est discrète, moins elle sera remontée, et donc plus elle sera pérenne.

Dans tous les cas, je ne pense pas qu'on puisse encapsuler toute l'application dans un try ... catch. C'est le langage de programmation qui limite. Et dans try... catch il y a catch : qu'est-ce qu'on fait quand il y a une erreur ?

La chose la plus commune et la plus efficace à faire c'est de brancher un outil de suivi des erreurs. Pour 10 erreurs, il n'y en a qu'une seule qui est remontée par un utilisateur motivé. Avec Glitchtip ou assimilé, on les suit et on les corrige par priorité.

Le problème de ces outils, c'est qu'ils créent un tas de faux négatifs. En général en utilisant le leader Sentry, on se retrouve englouti par les erreurs et on voit vite l'historique disparaitre si on ne paie pas un abonnement mensuel. Mais ça mérite quand même d'être mis en place, notamment via des outils ouverts comme Glitchtip. Je l'avais fait, mais surveiller et entretenir le serveur prend du temps, donc il était tombé.

Bref, y a pas de solution simple à ça : faut bosser.

  • réduire les erreurs
  • les corriger rapidement quand il y en a
  • les surveiller avec un outil
  • plus long terme : mieux typer pour trouver les erreurs au moment où l'on code :)
Pour le sujet des erreurs, c'est à double tranchant : plus l'erreur est discrète, moins elle sera remontée, et donc plus elle sera pérenne. Dans tous les cas, je ne pense pas qu'on puisse encapsuler toute l'application dans un `try ... catch`. C'est le langage de programmation qui limite. Et dans try... catch il y a catch : qu'est-ce qu'on fait quand il y a une erreur ? La chose la plus commune et la plus efficace à faire c'est de brancher un outil de suivi des erreurs. Pour 10 erreurs, il n'y en a qu'une seule qui est remontée par un utilisateur motivé. Avec Glitchtip ou assimilé, on les suit et on les corrige par priorité. Le problème de ces outils, c'est qu'ils créent un tas de faux négatifs. En général en utilisant le leader Sentry, on se retrouve englouti par les erreurs et on voit vite l'historique disparaitre si on ne paie pas un abonnement mensuel. Mais ça mérite quand même d'être mis en place, notamment via des outils ouverts comme Glitchtip. Je l'avais fait, mais surveiller et entretenir le serveur prend du temps, donc il était tombé. Bref, y a pas de solution simple à ça : faut bosser. - réduire les erreurs - les corriger rapidement quand il y en a - les surveiller avec un outil - plus long terme : mieux typer pour trouver les erreurs au moment où l'on code :)
Owner
Copy link

Concernant le chargement : oui, ce serait bien qu'on améliore le chargement et qu'on fiabilise les requêtes (les relancer quand ça foire) et aussi qu'on améliore l'app sur de mauvaises connexions.

Concernant le chargement : oui, ce serait bien qu'on améliore le chargement et qu'on fiabilise les requêtes (les relancer quand ça foire) et aussi qu'on améliore l'app sur de mauvaises connexions.
Owner
Copy link

J'ai re-testé de mettre en ligne une instance d'un loggueur d'erreurs mais j'ai des problèmes sur l'envoi des mails. Je vais donc rebrancher Sentry en attendant.

J'ai re-testé de mettre en ligne une instance d'un loggueur d'erreurs mais j'ai des problèmes sur l'envoi des mails. Je vais donc rebrancher Sentry en attendant.
Owner
Copy link

OK Sentry fonctionne en dev, à tester en prod à la prochaine erreur

OK Sentry fonctionne en dev, à tester en prod à la prochaine erreur
Owner
Copy link

Ça marche en prod. Laissons-nous quelques heures et observons les erreurs les plus courantes pour agir.

image

Ça marche en prod. Laissons-nous quelques heures et observons les erreurs les plus courantes pour agir. ![image](/attachments/9bc05db5-d329-4198-a4f7-3aa4c44742e9)

Youpi. C'est consultable publiquement ?

Youpi. C'est consultable publiquement ?

@laem un des pb de l'écran bleu, c'est qu'il conseille de recharger la page alors que :

  • dans >99% des cas ça ne résout pas le pb
  • sur mobile en PWA, je n'arrive même pas à recharger la page, je suis obligé de fermer l'app et la rouvrir

Le message demande à poster l'erreur sur bluesky, en pratique ça n'est pas arrivé depuis plusieurs mois, n'est ce pas ? Si on ne peut pas utiliser sentry ou équivalent, pourrait-on ajouter un bouton qui enregistre l'erreur qq part ? ou déclenche un bot qui la poste qq part ?

@laem un des pb de l'écran bleu, c'est qu'il conseille de recharger la page alors que : - dans >99% des cas ça ne résout pas le pb - sur mobile en PWA, je n'arrive même pas à recharger la page, je suis obligé de fermer l'app et la rouvrir Le message demande à poster l'erreur sur bluesky, en pratique ça n'est pas arrivé depuis plusieurs mois, n'est ce pas ? Si on ne peut pas utiliser sentry ou équivalent, pourrait-on ajouter un bouton qui enregistre l'erreur qq part ? ou déclenche un bot qui la poste qq part ?
Owner
Copy link

en pratique ça n'est pas arrivé depuis plusieurs mois

Ah si parfois en message privé. Mais c'est rare, il y a tout autant de tickets créés ici.

> en pratique ça n'est pas arrivé depuis plusieurs mois Ah si parfois en message privé. Mais c'est rare, il y a tout autant de tickets créés ici.
Owner
Copy link

Si on ne peut pas utiliser sentry ou équivalent, pourrait-on ajouter un bouton qui enregistre l'erreur qq part ? ou déclenche un bot qui la poste qq part ?

Non, c'est vraiment compliqué d'analyser les erreurs sur Sentry. On est noyé dans les erreurs. CF ce que je disais plus haut :

Le problème de ces outils, c'est qu'ils créent un tas de faux négatifs.

Voici une capture des dernières minutes. Il faut passer des heures à comprendre et corriger. Je te file l'accès à mon compte en privé, tu peux aller explorer 🔭

image

> Si on ne peut pas utiliser sentry ou équivalent, pourrait-on ajouter un bouton qui enregistre l'erreur qq part ? ou déclenche un bot qui la poste qq part ? Non, c'est vraiment compliqué d'analyser les erreurs sur Sentry. On est noyé dans les erreurs. CF ce que je disais plus haut : > Le problème de ces outils, c'est qu'ils créent un tas de faux négatifs. Voici une capture des dernières minutes. Il faut passer des heures à comprendre et corriger. Je te file l'accès à mon compte en privé, tu peux aller explorer 🔭 ![image](/attachments/93d7f9cf-0050-4a4a-88c8-6ace4ea4fa24)
167 KiB
Member
Copy link

@laem wrote in #1326 (comment):

Dans tous les cas, je ne pense pas qu'on puisse encapsuler toute l'application dans un try ... catch. C'est le langage de programmation qui limite. Et dans try... catch il y a catch : qu'est-ce qu'on fait quand il y a une erreur ?

Je suis curieux, qu'entends-tu par le "langage de programmation qui limite" ?

Il y a les Error Boundaries
https://react.dev/reference/react/useTransition#displaying-an-error-to-users-with-error-boundary

image

@laem wrote in https://codeberg.org/cartes/web/issues/1326#issuecomment-8881992: > Dans tous les cas, je ne pense pas qu'on puisse encapsuler toute l'application dans un `try ... catch`. C'est le langage de programmation qui limite. Et dans try... catch il y a catch : qu'est-ce qu'on fait quand il y a une erreur ? Je suis curieux, qu'entends-tu par le "langage de programmation qui limite" ? Il y a les Error Boundaries https://react.dev/reference/react/useTransition#displaying-an-error-to-users-with-error-boundary ![image](/attachments/97e7c104-8310-4ab1-9954-f8282ebe946a)
Owner
Copy link

Oui c'est vrai qu'on n'utilise pas les ErrorBoundaries. Mais comment verrais-tu leur utilité ici ?

Oui c'est vrai qu'on n'utilise pas les ErrorBoundaries. Mais comment verrais-tu leur utilité ici ?
Member
Copy link

@laem wrote in #1326 (comment):

Oui c'est vrai qu'on n'utilise pas les ErrorBoundaries. Mais comment verrais-tu leur utilité ici ?

Non cétait surtout une question par rapport a ta formulation de "limite de langage". Sinon pour ma part j'ai pas forcément eu de bug avec cartes.app jusqu'a mtn (sauf une fois mais non reproduit)

@laem wrote in https://codeberg.org/cartes/web/issues/1326#issuecomment-10142049: > Oui c'est vrai qu'on n'utilise pas les ErrorBoundaries. Mais comment verrais-tu leur utilité ici ? Non cétait surtout une question par rapport a ta formulation de "limite de langage". Sinon pour ma part j'ai pas forcément eu de bug avec cartes.app jusqu'a mtn (sauf une fois mais non reproduit)
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
4 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#1326
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?