File locale
- Chaque événement est écrit immédiatement dans une file locale (IndexedDB, fallback localStorage) avant toute tentative réseau.
track()/page()se résolvent dès la persistance en file, sans attendre le réseau — l’UI n’est jamais bloquée.
Batch & scheduler
- Envoi par batch : déclenché au premier des deux seuils atteint.
- Intervalle :
flushIntervalMs(défaut 5000 ms). - Taille :
flushBatchSize(défaut 10 événements).
- Intervalle :
- Flush aussi sur
visibilitychange/pagehide(best-effort viakeepalive/sendBeacon). flush()force une tentative immédiate.
Retry avec backoff
Defaults :
maxRetries: 10, retryBaseDelayMs: 1000, retryMaxDelayMs: 60000.
Idempotence par UUID
Chaque événement porte uneventId (UUID v4) généré côté client et jamais
regénéré au retry. Côté ingestion, la déduplication (ON CONFLICT DO NOTHING)
garantit qu’un batch rejoué après un échec réseau ne crée aucun doublon.
Tester le comportement offline
1
Couper la connexion
Passez l’onglet en mode hors-ligne (DevTools → Network → Offline).
2
Générer des événements
Naviguez, cliquez, appelez
track(). Les événements s’accumulent en file.3
Reconnecter
Rétablissez la connexion. Le scheduler renvoie la file au prochain flush.
4
Vérifier l'absence de doublon
Comptez les
eventId reçus côté ingestion : chaque UUID n’apparaît qu’une fois.