Un cambio en el modo de durabilidad predeterminado en IndexedDB

El modo de durabilidad predeterminado en IndexedDB cambia de strict a relaxed desde la versión 121 de Chrome. El objetivo de este ajuste es mejorar el rendimiento y alinearlo con otros navegadores importantes, como Firefox y Safari. En la entrada de blog, se explican los detalles de este cambio y lo que significa para los desarrolladores web.

Modos de durabilidad de IndexedDB

IndexedDB, una potente API web para almacenar grandes cantidades de datos estructurados, ofrece dos modos de durabilidad para las transacciones de readwrite:

  • strict: Este modo indica de forma explícita al SO que limpie los cambios en el disco antes de emitir el evento complete.
  • relaxed este modo se basa en el comportamiento predeterminado de limpieza del SO y emite el evento complete después de que los cambios llegan al búfer del SO, que, por lo general, se vacía cada dos segundos.

Es importante tener en cuenta que strict no garantiza que los cambios se escriban realmente de inmediato en el disco. Después de que un sitio llama a put(), existe una cantidad de tiempo limitada durante la cual una falla de energía podría provocar que el cambio no aparezca en el disco y, por lo tanto, falte la próxima vez que se ejecute la app.

Cuando se trata de garantías con durabilidad strict, el evento complete de la transacción de IndexedDB no se activa hasta después de que se escriben realmente los datos, mientras que, con la durabilidad de relaxed, los datos aún están en proceso de escritura cuando se activa el evento complete. (Para obtener más detalles sobre el proceso completo, consulte esta explicación).

Por lo tanto, strict es solo para operaciones en las que necesitas saber absolutamente que se escribió antes de hacer el siguiente paso. La migración de datos es un ejemplo en el que se requiere la durabilidad de strict. Cuando cambies de un almacén de copia de seguridad a otro, no querrás borrar el formato anterior hasta que se escriba el nuevo. De esta manera, la durabilidad de strict facilita una rutina de migración que podría recuperarse de una falla a mitad del proceso.

Cambio del modo de durabilidad predeterminado

El aspecto fundamental de este cambio es el modo de durabilidad predeterminado para las transacciones de readwrite en Chrome. Hasta ahora, el valor predeterminado era strict, lo que garantizaba escrituras inmediatas en el disco para los cambios de datos. Sin embargo, debido a consideraciones de rendimiento y al estar alineado con otros navegadores principales que usan relaxed, Chrome también planea cambiar el valor predeterminado a relaxed.

Este cambio está diseñado para proporcionar un mejor equilibrio entre el rendimiento y la durabilidad de los datos. Si bien strict garantiza la máxima durabilidad de los datos, relaxed suele ser suficiente para muchas aplicaciones web y puede mejorar significativamente el rendimiento de las siguientes maneras

  • Velocidad: En ejemplos reales, el equipo de Chrome observó mejoras en la velocidad del 3 al 30.
  • Durabilidad del disco, especialmente para dispositivos con un disco de estado sólido (SSD)
  • Mayor duración de la batería
  • Mejora en la velocidad de lectura. Debido a la arquitectura de IndexedDB, en la que las transacciones de lectura suelen bloquearse detrás de las transacciones de escritura, la velocidad de lectura se mejora como un efecto secundario.
  • Todo el dispositivo se ve afectado de manera positiva, porque las operaciones del disco son un recurso compartido del sistema.

Interoperabilidad y compatibilidad

Un aspecto importante de este cambio es su impacto en la interoperabilidad y compatibilidad. Chromium mejora la interoperabilidad, al alinearse con el comportamiento de otros proveedores de navegadores importantes. El estándar en sí permite diferentes implementaciones, y este cambio tiene como objetivo armonizar esas implementaciones. Puedes encontrar más contexto histórico sobre este cambio en este problema de GitHub.

¿Qué significa esto para los desarrolladores web?

Este cambio no introduce ninguna plataforma de API nueva. La API de IndexedDB existente sigue siendo la misma, y este cambio afecta principalmente el comportamiento predeterminado de las transacciones de readwrite. Puedes especificar tu modo de durabilidad preferido cuando creas transacciones, lo que te permite controlar la durabilidad y el rendimiento de los datos. En la siguiente muestra de código, se indica cómo recuperar el comportamiento anterior configurando durability como strict en el array de opciones opcionales.

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

Prueba el cambio de forma local antes de enviarlo

El cambio entrará en vigencia en Chrome 121. Si deseas probar el nuevo comportamiento de forma local antes, activa o desactiva la marca #indexed-db-default-durability-relaxed en chrome://flags.

Más información

Para obtener más detalles técnicos y actualizaciones sobre este cambio, consulta el error de seguimiento y la entrada de estado de Chrome Platform.

En resumen, la decisión de Chrome para cambiar el modo de durabilidad predeterminado en IndexedDB tiene como objetivo mejorar el rendimiento y, al mismo tiempo, mantener la compatibilidad con otros navegadores importantes. En la mayoría de los casos, recomendamos no hacer nada, ya que la nueva configuración predeterminada proporcionará mejoras en el rendimiento. Si es necesario, puedes seguir especificando tu modo de durabilidad preferido y, así, controlar la durabilidad y el rendimiento de los datos en tus aplicaciones web.

Agradecimientos

Evan Stade y Rachel Andrew revisaron este artículo.