Pubblicato il 3 aprile 2025
Quando è il momento di implementare una nuova funzionalità in Chrome, vengono eseguiti molti controlli per garantire che sia funzionante, conforme e affidabile. Uno di questi controlli è rappresentato dagli esperimenti di Finch. Non lasciarti ingannare dalla parte "esperimento" del nome, che potrebbe farti pensare che non sia sicuro: è esattamente il contrario. Le implementazioni di Finch ci aiutano ad aggiungere in modo sicuro funzionalità che potrebbero potenzialmente causare problemi di compatibilità, in quanto ci consentono di disattivare rapidamente una funzionalità se riscontriamo problemi imprevisti. Questo articolo spiega come e perché utilizziamo Finch per alcune release di funzionalità in Chrome.
In genere, per attivare una funzionalità in Chrome è sufficiente attivare un valore booleano all'interno di Chrome. Quando una nuova funzionalità viene "distribuita", significa semplicemente che lo stato predefinito di questo valore booleano è stato modificato in "on" per tutti gli utenti. Esistono diversi modi per farlo:
- Attivare la funzionalità "nel codice": significa che l'eseguibile di Chrome stesso ha un'impostazione attiva per impostazione predefinita.
- Attivare la funzionalità "tramite prova dell'origine": il sistema di prova dell'origine consente a un sito specifico di attivare un esperimento per tutti gli utenti di Chrome, il che abilita una funzionalità specifica solo su quel sito.
- Attivare la funzionalità "utilizzando Finch": Chrome recupera periodicamente un file di configurazione da un server e questo file può contenere istruzioni per attivare o disattivare una funzionalità.
- Un "kill switch di Finch": è l'opposto dell'attivazione "utilizzando Finch". In questo caso, la funzionalità è attivata "nel codice", ma poi disattivata utilizzando il sistema Finch, in genere a causa di problemi rilevati dopo il lancio.
Casi d'uso di Finch
L'argomento di questo post del blog è Finch, quindi non parleremo molto di più dell'attivazione "nel codice" o della "prova dell'origine". Tuttavia, Finch ha diversi casi d'uso interessanti.
Test su un piccolo gruppo di utenti (test A/B)
Spesso, Finch viene utilizzato per eseguire "test A/B" di una funzionalità o di un'ottimizzazione. In questo caso, una funzionalità viene attivata per una piccola percentuale di utenti, in modo che sia possibile raccogliere dati sulla differenza di prestazioni, comportamento o utilizzo quando la funzionalità è attiva rispetto a quando è disattivata.
Un esempio di test A/B è quando abbiamo lanciato la funzionalità di decodifica speculativa delle immagini. Si tratta di un miglioramento delle prestazioni che non dovrebbe essere percepibile da sviluppatori o utenti, se non per il fatto che Chrome carica le pagine più rapidamente. Tuttavia, per assicurarci che non si verificasse nulla di imprevisto e per poter misurare con precisione l'impatto sulle prestazioni, abbiamo utilizzato Finch per eseguire un test A/B.
Disattivare una funzionalità problematica
Per la sicurezza del prodotto e dell'esperienza utente, Chrome può utilizzare il sistema Finch per disattivare da remoto le funzionalità problematiche che sono state attivate "nel codice". Ad esempio, se una funzionalità è stata attivata per impostazione predefinita, ma i problemi sono emersi solo dopo che Chrome ha raggiunto lo stato stabile, abbiamo bisogno di un modo per disattivare rapidamente la funzionalità per riportare utenti e aziende a uno stato sicuro. Questo può essere necessario quando sono presenti bug non rilevati nella funzionalità o quando una funzionalità interrompe il funzionamento dei siti esistenti per motivi imprevisti.
Attivare le funzionalità rischiose in modo più sicuro
Per la maggior parte delle funzionalità lanciate da Chrome, il rischio è minimo, perché possiamo testare e verificare che il nuovo codice funzioni su tutti i siti.
A volte, tuttavia, il lancio di funzionalità può essere piuttosto rischioso, a causa di problemi di compatibilità sconosciuti o di altre interazioni complesse. In questo caso, il sistema Finch può essere utilizzato per attivare effettivamente la funzionalità, anziché semplicemente tenerla in riserva come kill switch.
Ad esempio, la "semplificazione" del parser HTML è stata una modifica relativa alla nuova funzionalità di selezione personalizzabile che consentiva di inserire più contenuti rispetto a prima all'interno di un elemento <select>. Poiché è possibile che questa modifica possa interrompere il funzionamento dei siti esistenti, è stato necessario implementarla con attenzione.
L'attivazione delle funzionalità tramite Finch può essere più sicura rispetto all'utilizzo di Finch per rimuoverle, perché Finch non raggiunge il 100% degli utenti per vari motivi. Ad esempio, alcuni utenti aziendali hanno un criterio che vieta completamente la configurazione di Finch. Questi utenti rimarrebbero a rischio nel caso in cui una funzionalità venga attivata nel codice e poi disattivata tramite Finch, perché questi utenti non riceveranno l'impostazione di Finch e continueranno ad avere la funzionalità attiva. Se invece attiviamo la funzionalità utilizzando Finch, possiamo garantire la possibilità di disattivarla per tutti gli utenti in caso di emergenza.
Come verificare se è attivo un esperimento di Finch?
Per gli utenti è difficile farlo direttamente. Il modo consigliato è contattare un ingegnere di Chrome (in genere nel contesto di un bug di Chromium) e inviargli l'"elenco delle varianti". Si tratta di un elenco di versioni speciali codificate di tutte le impostazioni di Finch per un determinato browser. Può essere recuperato facilmente:
- Vai a
chrome://version. - Copia l'intero elenco di testo (sì, può essere piuttosto lungo) elencato accanto a "Varianti attive".
- Incolla il testo in un file di testo (ad esempio,
variations.txt) e allegalo a un bug.
Con questo elenco di varianti, gli ingegneri di Chrome possono decodificare l'elenco e vedere quali funzionalità sono attive o disattivate nel tuo browser.
Cosa succede quando l'esperimento di Finch raggiunge il 100% ed è pronto?
Una volta che ci siamo assicurati che il nostro esperimento sia "riuscito" e che la funzionalità in questione non comporti rischi per sviluppatori o utenti, attiviamo sempre la funzionalità "nel codice". A questo punto, è sicuro impostare una data di fine per la configurazione di Finch, in modo che smetta di avere effetto sui browser dopo la versione in cui la funzionalità è stata attivata nel codice.