47 points par xguru 2022-02-28 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Il arrive parfois qu’on veuille enregistrer un log quand l’utilisateur navigue vers une autre page ou soumet un formulaire
  • Mettre un fetch dans un événement de clic ne garantit pas que l’envoi aura bien lieu
  • On peut donc essayer de faire le fetch, puis de naviguer en mettant la destination dans window.location, mais cela ne garantit rien non plus
    • XHR est asynchrone et non bloquant
  • On peut utiliser await sur la Promise de fetch, mais cela a aussi des inconvénients
    • Le traitement devient plus lent, ce qui dégrade l’expérience utilisateur
    • Ce n’est pas aussi fiable qu’on pourrait l’espérer : impossible par exemple de gérer la fermeture de l’onglet du navigateur
  • Le navigateur propose plusieurs options pour préserver une requête HTTP
    • Avec le flag keepalive de Fetch, la requête est maintenue même si la page est interrompue
    • Une fonction plus simple comme Navigator.sendBeacon()
    • Les navigateurs prennent aussi en charge l’attribut ping des balises a (inconvénient : utilisable uniquement sur les liens, et Firefox ne le prend pas en charge par défaut)
  • Alors, que faut-il utiliser ?
    • Si possible, fetch() + keepalive
      • Pris en charge par 80 % des navigateurs
      • Permet d’envoyer des en-têtes personnalisés
      • Fonctionne aussi avec des requêtes GET
      • Compatible avec les anciens navigateurs
    • Cas où sendBeacon() est un bon choix
      • Pris en charge par 96 % des navigateurs
      • Quand on n’a pas besoin de beaucoup de personnalisation
      • Quand on préfère une API propre et élégante
      • Quand on ne veut pas entrer en concurrence avec d’autres requêtes prioritaires du navigateur

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.