Una modifica alla modalità di durabilità predefinita in IndexedDB

La modalità di durabilità predefinita in IndexedDB cambierà da strict a relaxed da Chrome 121. Questa modifica ha lo scopo di migliorare le prestazioni e di allinearsi a quelli degli altri principali browser, come Firefox e Safari. Il post del blog spiega i dettagli di questa modifica e cosa significa per gli sviluppatori web.

Modalità di durabilità IndexedDB

IndexedDB, una potente API web per l'archiviazione di grandi quantità di dati strutturati, che offre due modalità di durabilità per le transazioni readwrite:

  • strict: questa modalità indica esplicitamente al sistema operativo di eliminare le modifiche sul disco prima di inviare l'evento complete.
  • relaxed questa modalità si basa sul comportamento di svuotamento predefinito del sistema operativo e genera l'evento complete dopo che le modifiche lo fanno nel buffer del sistema operativo, che in genere viene svuotato ogni due secondi.

È importante notare che strict non garantisce che le modifiche vengano effettivamente scritte immediatamente su disco. Dopo che un sito chiama put(), esiste ancora un periodo di tempo limitato durante il quale un'interruzione di corrente potrebbe causare la modifica in modo che non venga reso su disco e quindi non venga eseguito alla successiva esecuzione dell'app.

Per quanto riguarda le garanzie con la durabilità strict, l'evento complete della transazione IndexedDB non viene attivato fino dopo l'effettiva scrittura dei dati, mentre con la durabilità relaxed i dati sono ancora in processo di scrittura quando viene attivato l'evento complete. Per ulteriori dettagli sulla procedura completa, consulta questa spiegazione.

Quindi strict è davvero solo per le operazioni in cui devi assolutamente sapere che è stato scritto prima di fare il passo successivo. La migrazione dei dati è un esempio in cui è richiesta la durabilità strict. Quando passi da un archivio di backup a un altro, non vuoi eliminare il vecchio formato finché non viene scritto quello nuovo. In questo modo, la durabilità di strict facilita una routine di migrazione che potrebbe riprendersi da un errore a metà.

La modifica predefinita della modalità di durabilità

L'aspetto cruciale di questa modifica è la modalità di durabilità predefinita per le transazioni readwrite in Chrome. Fino ad ora, il valore predefinito era strict, garantendo scritture immediate del disco per modifiche ai dati. Tuttavia, per considerazioni sulle prestazioni e per allinearsi con gli altri principali browser che utilizzano tutti relaxed, Chrome prevede di cambiare il valore predefinito in relaxed.

Questa modifica è pensata per fornire un migliore equilibrio tra prestazioni e durabilità dei dati. Sebbene strict garantisca la massima durabilità dei dati, relaxed spesso è sufficiente per molte applicazioni web e può migliorare significativamente le prestazioni nei modi seguenti

  • Velocità: in esempi reali, il team di Chrome ha visto miglioramenti della velocità da un fattore 3 a 30.
  • Durabilità del disco, in particolare per i dispositivi con un disco a stato solido (SSD).
  • Durata della batteria prolungata.
  • Un miglioramento della velocità di lettura. Grazie all'architettura di IndexedDB, in cui le transazioni di lettura sono spesso bloccate dietro transazioni di scrittura, la velocità di lettura è migliorata come effetto secondario.
  • L'intero dispositivo è influenzato positivamente, perché le operazioni del disco sono una risorsa di sistema condivisa.

Interoperabilità e compatibilità

Un aspetto importante di questa modifica è il suo impatto sull'interoperabilità e sulla compatibilità. Allineandosi al comportamento di altri principali fornitori di browser, Chromium migliora l'interoperabilità. Lo standard stesso consente implementazioni diverse e questa modifica mira ad armonizzarle. Puoi trovare maggiori informazioni sul contesto storico di questa modifica in questo problema GitHub.

Cosa cambia per gli sviluppatori web?

Questa modifica non introduce una nuova piattaforma API. L'API IndexedDB esistente rimane invariata e questa modifica influisce principalmente sul comportamento predefinito delle transazioni readwrite. Puoi specificare la tua modalità di durabilità preferita durante la creazione delle transazioni, per avere il controllo sulla durabilità e sulle prestazioni dei dati. Il seguente esempio di codice mostra come ripristinare il comportamento precedente impostando durability su strict nell'array di opzioni facoltative.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

Testare la modifica localmente prima della distribuzione

La modifica verrà applicata in Chrome 121. Se vuoi testare il nuovo comportamento a livello locale prima, attiva/disattiva il flag #indexed-db-default-durability-relaxed in chrome://flags.

Scopri di più

Per aggiornamenti e dettagli più tecnici su questa modifica, consulta il bug di monitoraggio e la voce relativa allo stato della piattaforma Chrome.

In breve, la modifica della modalità di durabilità predefinita in IndexedDB mira a migliorare le prestazioni mantenendo la compatibilità con gli altri principali browser di Chrome. Nella maggior parte dei casi consigliamo di non fare nulla, perché la nuova impostazione predefinita fornirà miglioramenti delle prestazioni. Se necessario, puoi continuare a specificare la modalità di durabilità preferita, assumendo il controllo della durabilità e delle prestazioni dei dati nelle tue applicazioni web.

Ringraziamenti

Questo articolo è stato esaminato da Evan Stade e Rachel Andrew.