Mi sistema de almacenamiento actual se ve así, porque estoy usando localStorage:
let storage = { "SETTING: dataTracking?": false, "NOTIFICATIONSTATUS: welcome": 'viewed', "logoClickCount": 0, "SETTING: soundEffects?": true, "NOTIFICATIONSTATUS: covid-19": 'viewed' }Es muy complicado y no es intuitivo de leer cuando se escribe código que necesita acceder a los datos. Por ejemplo, utilicé la convención de declarar en qué categoría se encuentra un atributo escribiendo "CONFIGURACIÓN: foo" o "NOTIFICATIONSTATUS: foo" para no tener duplicados y mantener un espacio de nombres de almacenamiento limpio. Lo que me gustaría hacer es esto:
let optimalStorage = { "logoClickCount": 0, "settings": {"dataTracking?":false,"soundEffects?": true}, "notificationsAlreadySeen": {"welcome":true,"covid-19":false} }Esto sería mucho mejor, pero localStorage no lo admite. Quería intentar usar indexedDB para simplemente poder almacenar este objeto de almacenamiento, de modo que al escribir código que necesita extraerse de la memoria, podría hacer algo como
if (optimalStorage['settings']['soundEffects?']) { playSound("/music/1.ogg"); }Idealmente, no se recuperaría el objeto completo, solo el valor de los datos. De esa manera, cuando creo otra rama de almacenamiento para varias imágenes generadas por el usuario (uris de datos), no necesita preocuparse por obtener varios megabytes de datos cada vez que quiero ver si la opción de efectos de sonido está habilitada.
Estoy empezando a tener la sensación de que indexedDB es innecesariamente complejo para lo que estoy tratando de lograr porque no he podido entenderlo en absoluto. ¿Existe un término medio entre localStorage e indexedDB? Si no, ¿existe una versión más simple de indexedDB que solo almacene un objeto grande para un acceso fácil y rápido?