Una nuova ottimizzazione in Chrome migliora il modo in cui i dati di IndexedDB vengono archiviati su disco. Questo miglioramento si concentra sulla gestione dei valori di grandi dimensioni all'interno del sistema di archiviazione di Chrome, in particolare introducendo la compressione di determinati file archiviati sul disco. L'articolo riassume i punti chiave di questo aggiornamento.
Meccanismo di archiviazione di Chrome precedente alla versione 129
Chrome utilizza LevelDB per archiviare i dati di IndexedDB sul disco. LevelDB è una libreria di archiviazione chiave-valore veloce, ma ha difficoltà quando i singoli valori superano le dimensioni di una pagina di database. Per risolvere il problema, dal 2017 Chrome memorizza i valori più grandi di una singola pagina come file di testo sul disco insieme al file del database.
Spazio di archiviazione dalla versione 129
Compressione di valori di grandi dimensioni
A differenza dei contenuti archiviati direttamente nel database LevelDB, che vengono compressi prima di essere scritti su disco e decompressi dopo la lettura, i file di grandi dimensioni archiviati come file semplici non sono stati compressi. Con il nuovo aggiornamento, Chrome comprimerà questi file di grandi dimensioni utilizzando la libreria di compressione in tempo reale Snappy, con un notevole risparmio di spazio. Questo è particolarmente efficace per i dati strutturati, come grandi array di valori JavaScript, XML o JSON. Non è efficace per i file multimediali di grandi dimensioni, ma già compressi o, meno comunemente, se il sito esegue già la compressione e lo scompattamento.
Impatto sull'efficienza di archiviazione
Se la compressione riduce le dimensioni del file al di sotto di quelle di una pagina LevelDB, i dati vengono spostati di nuovo in LevelDB. Questa modifica non solo consente di risparmiare spazio, ma riduce anche le operazioni di I/O del disco, migliorando le prestazioni complessive.
Algoritmo di compressione Snappy
Il team di Chrome ha scelto Snappy per la compressione perché ottimizza la velocità anziché la compressione massima. È abbastanza veloce da non introdurre penalità di rendimento misurabili durante la compressione o la decompressione.
Miglioramenti del rendimento
La compressione e la decompressione vengono gestite all'interno del processo del renderer, che fa parte dell'architettura multiprocesso di Chrome. In questo modo, le dimensioni dei messaggi inviati al processo del browser vengono ridotte, con un ulteriore miglioramento delle prestazioni. I benchmark sintetici hanno dimostrato che questo aggiornamento può rendere alcune operazioni due o tre volte più veloci rispetto a prima a causa della riduzione dell'IPC (Inter-Process Communication) e dell'I/O del disco. In pratica, nelle misurazioni del team di Chrome, i payload di dati strutturati di 1 MB vengono caricati dal disco alla pagina in circa un quarto del tempo (con un'elevata variabilità in base all'hardware del dispositivo e all'attività di sistema).
Impatto sugli sviluppatori e sugli utenti
Queste modifiche sono completamente trasparenti sia per gli sviluppatori sia per gli utenti. Tuttavia, gli utenti potrebbero notare miglioramenti delle prestazioni e una riduzione dell'utilizzo dello spazio di archiviazione.
- Risparmio di spazio: la compressione viene applicata solo ai nuovi dati archiviati dopo questo aggiornamento. Il risparmio di spazio può essere osservato indirettamente utilizzando API web come
navigator.storage.estimate()
o nella sezione Spazio di archiviazione in Chrome DevTools, nel riquadro Applicazione. - Test della funzionalità:gli sviluppatori possono testare questo comportamento nelle versioni di pre-release di Chrome (pre-129) attivando la funzionalità con il flag:
--enable-features="IndexedDBCompressValuesWithSnappy"
.
Questo aggiornamento migliora l'efficienza di Chrome nella gestione di valori IndexedDB di grandi dimensioni, offrendo risparmi di spazio e tempo senza compromettere le prestazioni e segnando un miglioramento significativo del modo in cui i dati vengono archiviati e a cui si accede nel browser. Comprendendo queste modifiche, gli sviluppatori possono trarre vantaggio dagli sforzi continui per ottimizzare le prestazioni e i meccanismi di archiviazione di Chrome, garantendo un'esperienza utente più fluida ed efficiente.
Ringraziamenti
Questo documento è stato esaminato da Evan Stade e Rachel Andrew.