Actualmente estoy desarrollando un sitio que utilizará localStorage de HTML5. Leí todo sobre las limitaciones de tamaño para diferentes navegadores. Sin embargo, no he visto nada sobre cómo averiguar el tamaño actual de una instancia de localStorage. Esta pregunta parece indicar que JavaScript no tiene una forma integrada de mostrar el tamaño de una variable determinada. ¿LocalStorage tiene una propiedad de tamaño de memoria que no he visto? ¿Hay una forma fácil de hacer esto que me falta?
Mi sitio está diseñado para permitir que los usuarios ingresen información en un modo "sin conexión", por lo que es muy importante poder darles una advertencia cuando el almacenamiento está casi lleno.
javascript
html
local-storage
derivación
fuente
fuente
Respuestas:
Ejecute este fragmento en la consola de JavaScript (versión de una línea):
El mismo código en varias líneas para leer.
o agregue este texto en el campo 'ubicación' de un marcador para un uso conveniente
Los fragmentos de PS se actualizan de acuerdo con la solicitud en el comentario. Ahora el cálculo incluye la longitud de la clave en sí. Cada longitud se multiplica por 2 porque el carácter en javascript se almacena como UTF-16 (ocupa 2 bytes)
PPS debería funcionar tanto en Chrome como en Firefox.
fuente
var t = 0; for(var x in localStorage) { t += (x.length + localStorage[x].length) * 2; } console.log(t/1024+ " KB");
var _lsTotal = 0, _xLen, _x; for (_x in localStorage) { _xLen = (((localStorage[_x].length || 0) + (_x.length || 0)) * 2); _lsTotal += _xLen; console.log(_x.substr(0, 50) + " = " + (_xLen / 1024).toFixed(2) + " KB") }; console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");
_x
rompe. Simplemente elimine el subrayado.Saliendo de lo que @Shourav dijo anteriormente, escribí una pequeña función que debería tomar con precisión todas sus
localStorage
claves (para el dominio actual) y calcular el tamaño combinado para que sepa exactamente cuánta memoria ocupa sulocalStorage
objeto:El mío regresó:
"30.896484375 KB"
fuente
IE tiene una remainingSpace propiedad del objeto de almacenamiento. Los otros navegadores no tienen equivalente en este momento.
Creo que la cantidad de espacio predeterminada es de 5 MB, aunque no lo he probado personalmente.
fuente
Aquí hay un ejemplo simple de cómo hacer esto y debería funcionar con todos los navegadores.
fuente
Espero que esto ayude a alguien.
Debido a que Jas- example en jsfiddle no me funciona, se me ocurrió esta solución. (gracias a Serge Seletskyy y Shourav por sus bits que usé en el código a continuación)
A continuación se muestra la función que se puede usar para probar cuánto espacio hay disponible para localStorage y (si ya hay claves en lS) cuánto espacio queda.
Es un poco de fuerza bruta pero funciona en casi todos los navegadores ... excepto en Firefox. Bueno, en el escritorio FF se necesitan siglos (4-5 minutos) en completarse, y en Android simplemente falla.
Debajo de la función hay un breve resumen de las pruebas que he realizado en diferentes navegadores en diferentes plataformas. ¡Disfrutar!
Y como se prometió anteriormente, algunas pruebas en diferentes navegadores:
GalaxyTab 10.1
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (Core 2 Duo 2.66 de memoria de 8 Gb)
iPad 3 iOS 6.1.3
Windows 7 -64b (Core 2 Duo 2,93 de memoria de 6 Gb)
Gana 8 (bajo Parallels 8)
fuente
array.forEach()
en su código, como sé que no existe en IE, ¿lo implementa usted mismo? ¿Cómo mide su contribución a la latencia general?forEach()
. No, no lo he implementado yo mismo, utilicé el stockArray.prototype.forEach()
. Según Mozilla Developer Network, también conocido como MDN de IE9, tiene soporte nativo.Array.prototype.forEach()
tanto como sea posible si mi proyecto no es compatible con las primeras versiones de IE.while
bucle en dos partes, la primera como en stackoverflow.com/a/3027249/1235394 que llena localStorage con fragmentos de datos que crecen exponencialmente, luego la segunda parte con trozos pequeños de tamaño fijo para llenar el almacenamiento por completo. Página de prueba: jsfiddle.net/pqpps3tk/1Puede obtener el tamaño actual de los datos de almacenamiento local mediante la función Blob. Es posible que esto no funcione en navegadores antiguos, verifique el soporte para
new Blob
yObject.values()
en caniuse.Ejemplo:
Object.values () convierte el objeto localStorage en una matriz. Blob convierte la matriz en datos sin procesar.
fuente
Blob
que no restringe la codificación de cadenas a UTF-16, por lo que este podría ser el método más confiable.new Blob(['X']).size;
= 1 considerandonew Blob(['☃']).size
(U + 2603 / carácter de muñeco de nieve) ==> 3. Las soluciones basadas enString.prototype.length
no tienen esto en cuenta (tratan con "caracteres") mientras que las cuotas / límites de almacenamiento probablemente sí (tratan con bytes), y podría imaginar esto lleva a sorpresas, por ejemplo, al almacenar caracteres no ingleses / ASCII.Puede calcular su almacenamiento local mediante los siguientes métodos:
Finalmente, el tamaño en bytes se registrará en el navegador.
fuente
Usaría el código de @tennisgen que obtiene todo y cuenta el contenido, pero cuento las claves en sí mismas:
fuente
La forma en que resolví este problema fue crear funciones para averiguar el espacio utilizado y el espacio restante en el almacenamiento local y luego una función que llama a esas funciones para determinar el espacio máximo de almacenamiento.
fuente
Además de la respuesta de @ serge, que es la más votada aquí, se debe considerar el tamaño de las claves. El código a continuación agregará el tamaño de las claves almacenadas en
localStorage
fuente
undefined
para el elementolength
en algunos casos, por lo que hemos añadido un condicional a la adición:t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Según la especificación, cada carácter de una cadena es de 16 bits.
Pero inspeccionar con Chrome (Configuración> Configuración de contenido> Cookies y datos del sitio) nos muestra que iniciar localStorage toma 3kB (tamaño de sobrecarga)
Y el tamaño de los datos almacenados sigue esta relación (con una precisión de 1 kB)
3 + ((localStorage.x.length * 16) / (8 * 1024)) kB
donde localStorage.x es su cadena de almacenamiento.
fuente
// La memoria ocupa tanto la clave como el valor, por lo que el código actualizado.
fuente
Sí, esta pregunta se hizo como hace 10 años. Pero para aquellos interesados (como yo, ya que estoy construyendo un editor de texto sin conexión que guarda datos con almacenamiento local) y apestan a la programación, podrían usar algo simple como esto:
La mejor manera de llenar la cantidad de almacenamiento es ver la configuración del sitio (por ejemplo, si almacenó una imagen en el almacenamiento local). Al menos en Chrome, puede ver la cantidad de bytes utilizados (es decir, 1222 bytes). Sin embargo, las mejores formas de ver el almacenamiento local lleno con js ya se han mencionado anteriormente, así que úselas.
fuente
fuente