Aller au contenu
Hébergé et stocké en Europe. Vos données ne partent jamais aux États-Unis.Hébergé et stocké en EuropeEn savoir plus

Affecter côté serveur, mesurer par API, déployer par paliers.

L’aide serveur affecte avant le rendu, sans clignotement. L’API reçoit les événements de vos serveurs. Les déploiements suivent les garde-fous et reviennent seuls en arrière.

Aide serveur
// proxy.ts : affectation avant le rendu
const { setCookie, assignments } = assignRequest({
  cookieHeader, url, userAgent,
  config,  // GET /api/v1/config, gardé en mémoire
  consent, // choix du visiteur
});
assignedVariants(assignments);
// { "date-livraison": "b" }

Aucune dépendance à un framework : la même fonction sert dans un proxy Next.js, un serveur Node ou en périphérie de réseau.

Un test mal branché se voit à l’écran et dans les données.

Les difficultés les plus courantes quand l’expérimentation passe des mains du marketing à celles des équipes techniques.

  • Le clignotementUn script qui modifie la page après l’affichage montre l’originale une fraction de seconde.
  • Deux affectations qui divergentSi le serveur et le navigateur ne partagent pas le même tirage, un visiteur change de version d’une page à l’autre.
  • Des flags sans mesureUn flag active une fonctionnalité ; sans comparaison, personne ne sait ce qu’elle a changé.
  • Un déploiement sans filetPasser d’un coup à tout le trafic expose chaque visiteur à une régression.
  • Des événements éparpillésCommandes dans le back-office, clics dans l’analytique : le test ne voit qu’une partie de l’histoire.

Une seule affectation, du serveur au navigateur.

Chaque chiffre ci-dessous est celui que le produit applique.

Les événements arrivent de partout ; les paliers reviennent seuls.

Envoyer les commandes depuis vos serveurs.

Le script envoie expositions et conversions depuis le navigateur. L’API reçoit ce que seul le serveur connaît : commandes confirmées, montants, mesures. Réponse 202 avec le décompte des événements acceptés et refusés.

Horodatage jusqu’à 5 minutes dans le futur et 7 jours dans le passé. Une clé secrète présentée à l’API publique est refusée.

API des événements
POST /api/v1/events
x-probant-key: "pk_…"

{ "events": [
  { "type": "conversion", "visitorId": "…",
    "metric": "commande", "value": 89.9 }
] }

Un garde-fou franchi, et tout le monde revient sur l’originale.

Au palier 50 %, la valeur du taux de retour passait de 7,8 % sur l’originale à 14,5 % chez les visiteurs exposés. Dès que toute la fourchette a dépassé la limite de +25 %, le déploiement est revenu à l’originale : le 10 nov. à 05:12, sans intervention.

La part exposée ne fait que monter : un visiteur exposé à un palier l’est encore aux suivants. Personne ne revient à l’originale après avoir vu la nouvelle version, sauf retour arrière.

Recommandations « Vous aimerez aussi »ramené à l’originale
  1. 10 %29 oct. → 30 oct.
  2. 25 %31 oct. → 2 nov.
  3. 50 %arrêté le 10 nov. à 05:12
  4. 100 % 
  • Taux de retour : +85,1 %, fourchette de +27,0 % à +143,2 %, limite +25 %. Limite franchie.
  • Vitesse mobile (LCP) : +1,9 %, fourchette de +0,8 % à +3,0 %, limite +4 %. Dans la limite.
  • Erreurs JavaScript : +5,2 %, fourchette de -30,8 % à +41,2 %, limite +30 %. Pas encore tranché.
  • CA par visiteur : +0,2 %, fourchette de -15,6 % à +15,9 %, limite -5 %. Pas encore tranché.

Boutique de démonstration Maison Lune, fictive · déploiement rejoué par le moteur

Du flag au déploiement, une même configuration.

Le cycle d’une fonctionnalité testée puis déployée, sans changer de système en route.

  1. Créer

    Créer l’expérience dans une couche.

    Chaque test occupe une tranche de sa couche. Probant refuse une tranche qui en chevauche une autre.

    Dans le produitUne tranche se règle par pas de 0,01 % du trafic.
  2. Affecter

    Affecter avant le rendu.

    L’aide serveur lit la configuration gardée en mémoire et renvoie la variante de chaque test, ou la raison de l’exclusion : holdout, tranche, adresse ou appareil.

    Dans le produitConfiguration publique en cache 60 secondes.
  3. Mesurer

    Envoyer expositions et conversions.

    Le script mesure dans le navigateur ; l’API reçoit les commandes confirmées par vos serveurs.

    Dans le produit500 événements et 256 Ko au plus par envoi.
  4. Décider

    Lire le rapport.

    Verdict, fourchette, gain corrigé et contrôles, calculés sur les agrégats par variante.

    Boutique de démonstrationBarre de livraison gratuite : afficher la progression vers la livraison offerte augmente le CA par visiteur de +6,0 % et la marge de +3,0 %.
  5. Déployer

    Monter par paliers.

    La part exposée passe dans la configuration ; les garde-fous sont relus à chaque contrôle, avec retour arrière automatique.

    Dans le produitPaliers standard : 25 %, 50 % et 100 % ; prudent : 10 %, 25 %, 50 % et 100 %.
  6. Nettoyer

    Retirer le flag.

    Une fois la variante servie à tous, le code de l’originale peut partir : un flag oublié est un chemin de code que plus personne ne teste.

    Dans le produitStatut « À retirer du code » après 14 jours servi à tous les visiteurs.

En chiffres.

< 6,5 Koscript navigateur compressé, chargé en asynchrone
10 000seaux d’affectation, déterministes
500événements au plus par envoi à l’API
390 jdurée maximale du cookie probant_id, jamais prolongé

Questions fréquentes.

Le script fait-il clignoter la page ?

Il ne masque jamais la page : chaque modification s’applique dès que son élément existe, puis à chaque redessin, avant l’affichage suivant. Pour un affichage sans aucun clignotement, l’affectation se fait côté serveur et le rendu reçoit directement la bonne variante.

L’affectation serveur et le script donnent-ils la même variante ?

Oui. Les deux lisent le même cookie (probant_id) et le même hachage : MurmurHash3 sur 10 000 seaux, avec un sel par espace, par couche et par test. Rien n’est stocké côté serveur pour retrouver la variante d’un visiteur.

Peut-on envoyer les commandes depuis le back-office ?

Oui, par l’API des événements : 500 événements et 256 Ko au plus par envoi, horodatés jusqu’à 7 jours dans le passé. Chaque événement est validé seul : un événement fautif n’empêche pas les autres.

Que se passe-t-il si Probant ne répond pas ?

La configuration se garde en mémoire (60 secondes de cache). Dans l’exemple de la documentation, l’aide serveur garde la configuration précédente si Probant ne répond pas, pour que le site n’attende jamais.

Y a-t-il un paquet npm ?

Pas encore. L’aide serveur ne dépend d’aucun framework : en attendant le paquet, ses fichiers se copient dans votre projet, comme l’indique la documentation.

Probant Ou pas encore…

Créez votre espace, ou explorez d’abord la démo avec les données d’une boutique fictive.

  • Démo ouverte, sans inscription
  • Forfait fixe, jamais de dépassement
  • Données hébergées à Paris