Una nueva optimización en Chrome mejora la forma en que se almacenan los datos de IndexedDB en el disco. Esta mejora se enfoca en cómo se administran los valores grandes dentro del sistema de almacenamiento de Chrome, específicamente, a través de la compresión de ciertos archivos almacenados en el disco. En el artículo, se resumen los puntos clave de esta actualización.
Mecanismo de almacenamiento de Chrome antes de la versión 129
Chrome usa LevelDB para almacenar datos de IndexedDB en el disco. LevelDB es una biblioteca de almacenamiento de pares clave-valor rápida, pero tiene problemas cuando los valores individuales superan el tamaño de una página de base de datos. Para abordar este problema, desde 2017, Chrome almacena valores más grandes que una sola página como archivos simples en el disco junto con el archivo de base de datos.
Almacenamiento a partir de la versión 129
Compresión de valores grandes
A diferencia del contenido almacenado directamente en la base de datos de LevelDB, que se comprime antes de escribirse en el disco y se descomprime después de leerse, los archivos grandes almacenados como archivos simples no se comprimieron. Con la nueva actualización, Chrome ahora comprimirá estos archivos grandes con la biblioteca de compresión en tiempo real Snappy, lo que generará un ahorro significativo de espacio. Esto es especialmente eficaz para los datos estructurados, como grandes arreglos de valores de JavaScript, XML o JSON. No es eficaz para los archivos multimedia que son grandes, pero ya están comprimidos o, en casos menos comunes, si el sitio ya realiza su propio proceso de compresión y descompresión.
Impacto en la eficiencia del almacenamiento
Si la compresión reduce el tamaño del archivo a menos que el tamaño de una página de LevelDB, los datos se vuelven a mover a LevelDB. Este cambio no solo ahorra espacio, sino que también reduce las operaciones de E/S del disco, lo que mejora el rendimiento general.
Algoritmo de compresión Snappy
El equipo de Chrome eligió Snappy para la compresión porque optimiza la velocidad en lugar de la compresión máxima. Es lo suficientemente rápido como para no introducir penalizaciones de rendimiento medibles durante la compresión o descompresión.
Mejoras en el rendimiento
La compresión y la descompresión se controlan dentro del proceso del renderizador, que forma parte de la arquitectura multiproceso de Chrome. Esto reduce el tamaño de los mensajes que se envían al proceso del navegador, lo que genera más mejoras de rendimiento. Las comparativas sintéticas demostraron que esta actualización puede hacer que algunas operaciones sean dos o tres veces más rápidas que antes debido a la reducción de la IPC (comunicación entre procesos) y la E/S de disco. En la práctica, en las mediciones del equipo de Chrome, las cargas útiles de datos estructurados de 1 MB se entregan del disco a la página en aproximadamente un cuarto del tiempo (con una alta variabilidad según el hardware del dispositivo y la actividad del sistema).
Impacto en los desarrolladores y usuarios
Estos cambios son completamente transparentes para los desarrolladores y los usuarios. Sin embargo, es posible que los usuarios noten mejoras en el rendimiento y reducciones en el uso del almacenamiento.
- Ahorro de espacio: La compresión solo se aplica a los datos nuevos almacenados después de esta actualización. El ahorro de espacio se puede observar de forma indirecta con APIs web, como
navigator.storage.estimate()
, o en la sección Storage de las Herramientas para desarrolladores de Chrome, en el panel Application. - Prueba la función: Los desarrolladores pueden probar este comportamiento en versiones previas al lanzamiento de Chrome (anteriores a la 129) habilitando la función con el parámetro
--enable-features="IndexedDBCompressValuesWithSnappy"
.
Esta actualización mejora la eficiencia de Chrome en la administración de valores grandes de IndexedDB, lo que ofrece ahorros de espacio y tiempo sin comprometer el rendimiento, lo que marca una mejora significativa en la forma en que se almacenan y acceden a los datos en el navegador. Si comprenden estos cambios, los desarrolladores pueden aprovechar los esfuerzos continuos para optimizar el rendimiento y los mecanismos de almacenamiento de Chrome, lo que garantiza una experiencia del usuario más fluida y eficiente.
Agradecimientos
Evan Stade y Rachel Andrew revisaron este documento.