Case study

ABTasty Antiflickering

Problema

Gli A/B test che richiedono trasformazioni pesanti e il caricamento di nuove immagini, per esempio il cambio di immagini nelle pagine di listing o in home, spesso provocano flickering quando le modifiche vengono iniettate direttamente via ABTasty. Succede perché il JavaScript di ABTasty parte dopo che la pagina ha iniziato a caricare: per un attimo l'utente vede il contenuto originale, poi arriva la variante. Per esperimenti complessi, che normalmente richiederebbero test lato server, l'approccio client-side rovina l'esperienza.

Soluzione

Ho sviluppato un workaround basato sui cookie che elimina del tutto il flickering. Invece di iniettare le modifiche direttamente da ABTasty, uso ABTasty per iniettare un cookie con il nome del test. Lato sito resto in ascolto del tag di ABTasty e, se la sessione ha un esperimento attivo, leggo i cookie e applico le modifiche dal frontend prima che la pagina venga renderizzata. Così le modifiche entrano in modo sincrono durante il caricamento, senza nessuno sfarfallio o salto di contenuto.

Risultato

Il workaround ha azzerato il flickering, anche sugli A/B test più complessi, quelli che di solito richiederebbero un'implementazione lato server. La soluzione permette di far girare senza artefatti visivi esperimenti pesanti: sostituzione di immagini, modifiche di layout, trasformazioni importanti del DOM. In pratica dà i vantaggi del test lato server, cioè nessun flickering e un'esperienza pulita, mantenendo la flessibilità degli strumenti client-side.

In sintesi

Gli A/B test pesanti su ABTasty, quelli che cambiano immagini o layout, facevano sfarfallare la pagina perché lo script partiva dopo l'inizio del caricamento. Invece di iniettare le modifiche da ABTasty, uso ABTasty solo per scrivere un cookie con il nome del test e applico le modifiche dal frontend prima del rendering. Il flickering è sparito anche sugli esperimenti che di solito richiederebbero il server-side.

Domande frequenti

Perché gli A/B test con ABTasty causano flickering?

Il JavaScript di ABTasty parte dopo che la pagina ha iniziato a caricare: per un attimo l'utente vede il contenuto originale, poi arriva la variante. Con trasformazioni pesanti e nuove immagini, per esempio il cambio di immagini nelle pagine di listing o in home, l'approccio client-side rovina l'esperienza.

Come funziona il workaround antiflickering basato sui cookie?

ABTasty non inietta più le modifiche ma solo un cookie con il nome del test. Lato sito resto in ascolto del tag di ABTasty e, se la sessione ha un esperimento attivo, leggo i cookie e applico le modifiche dal frontend prima che la pagina venga renderizzata, in modo sincrono e senza salti di contenuto.

Quali A/B test si possono fare senza flickering con questo approccio?

Esperimenti pesanti che di solito richiederebbero un'implementazione lato server: sostituzione di immagini, modifiche di layout, trasformazioni importanti del DOM. Si ottengono i vantaggi del test server-side, cioè nessun flickering, mantenendo la flessibilità degli strumenti client-side.