La modalità di durabilità predefinita in IndexedDB passerà da strict
a relaxed
a partire da Chrome 121. Questo aggiustamento serve a migliorare il rendimento e ad allinearsi ad altri browser importanti come Firefox e Safari. Il post del blog spiega i dettagli di questa modifica e cosa significa per gli sviluppatori web.
Modalità di durabilità di IndexedDB
IndexedDB, una potente API web per l'archiviazione di grandi quantità di dati strutturati, offre due modalità di durabilità per le transazioni readwrite
:
strict
: questa modalità indica esplicitamente al sistema operativo di svuotare le modifiche sul disco prima di emettere l'eventocomplete
.relaxed
questa modalità si basa sul comportamento di svuotamento predefinito del sistema operativo ed emette l'eventocomplete
dopo che le modifiche vengono inserite 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 sul disco. Dopo che un sito chiama put()
, rimane ancora un periodo di tempo limitato durante il quale un'interruzione di corrente potrebbe causare la mancata applicazione della modifica sul disco e, di conseguenza, la sua assenza alla successiva esecuzione dell'app.
Per quanto riguarda le garanzie con la durabilità strict
, l'evento complete
della transazione IndexedDB non viene attivato fino a quando i dati non vengono effettivamente scritti, 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.
Pertanto, strict
è utile solo per le operazioni in cui devi assolutamente sapere che è stata scritta prima di eseguire l'operazione successiva. La migrazione dei dati è un esempio in cui è richiesta la strict
durabilità. Quando passi da un archivio di supporto a un altro, non devi eliminare il vecchio formato finché non viene scritto quello nuovo. In questo modo, la durabilità di strict
semplifica una routine di migrazione che potrebbe recuperare da un errore a metà.
La modifica della modalità di durata predefinita
L'aspetto fondamentale di questa modifica è la modalità di durabilità predefinita per le transazioni readwrite
in Chrome. Fino a questo momento, il valore predefinito era strict
, che garantiva le scritture immediate sul disco per le modifiche ai dati. Tuttavia, per motivi di prestazioni e per allinearsi agli altri principali browser che utilizzano tutti relaxed
, anche Chrome prevede di impostare come predefinito relaxed
.
Questa modifica è progettata per offrire un migliore equilibrio tra prestazioni e durata dei dati. Sebbene strict
garantisca la massima durabilità dei dati, relaxed
è spesso sufficiente per molte applicazioni web e può migliorare notevolmente le prestazioni nei seguenti modi
- Velocità: in esempi reali, il team di Chrome ha registrato miglioramenti della velocità compresi tra un fattore 3 e 30.
- Resistenza del disco, in particolare per i dispositivi con un disco a stato solido (SSD).
- Batteria a lunga durata.
- Un miglioramento della velocità di lettura. A causa dell'architettura di IndexedDB, in cui le transazioni di lettura sono spesso bloccate dietro le transazioni di scrittura, la velocità di lettura viene migliorata come effetto secondario.
- L'intero dispositivo è interessato positivamente, perché le operazioni sul 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 importanti fornitori di browser, Chromium migliora l'interoperabilità. Lo standard stesso consente implementazioni diverse e questa modifica mira a armonizzarle. Per ulteriori informazioni storiche su questa modifica, consulta questo problema GitHub.
Che cosa significa per gli sviluppatori web?
Questa modifica non introduce nuove API. L'API IndexedDB esistente rimane invariata e questa modifica interessa principalmente il comportamento predefinito delle transazioni readwrite
. Puoi specificare la modalità di durabilità che preferisci quando crei le transazioni, in modo da avere il controllo sulla durabilità e sulle prestazioni dei dati. Il seguente esempio di codice mostra come ripristinare il vecchio comportamento impostando durability
su strict
nell'array facoltativo di opzioni.
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 spedizione
La modifica entrerà in vigore in Chrome 121. Se vuoi testare il nuovo comportamento localmente prima, attiva/disattiva il flag #indexed-db-default-durability-relaxed
in chrome://flags
.
Scopri di più
Per ulteriori dettagli tecnici e aggiornamenti su questa modifica, controlla il bug di monitoraggio e la voce dello stato della piattaforma Chrome.
In sintesi, la decisione di Chrome di modificare la modalità di durabilità predefinita in IndexedDB mira a migliorare le prestazioni mantenendo la compatibilità con gli altri principali browser. Nella maggior parte dei casi, il nostro consiglio è di non fare nulla, poiché il nuovo valore predefinito offrirà miglioramenti del rendimento. Se necessario, puoi continuare a specificare la modalità di durabilità che preferisci, assumendo il controllo sulla durabilità e sulle prestazioni dei dati nelle tue applicazioni web.
Ringraziamenti
Questo articolo è stato esaminato da Evan Stade e Rachel Andrew.