2012-07-23 16 views
5

Necesito una forma de encontrar el tamaño total tomado por una aplicación usando HTML5 sessionStorage/localStorage en tiempo de ejecución.Cómo obtener el tamaño de almacenamiento html5 total utilizado por la aplicación actual

No quiero enfoques basados ​​en el perfilador.

Lo que estoy haciendo actualmente es -

var data = 0; 
for(var v in window.sessionStorage){ 
data += window.sessionStorage.getItem(v); 
} 

console.log(data);//.length to get char length 

Y luego copiar y pegar este valor en un archivo de texto y comprobar el tamaño.

Feo y todavía no me ayuda tampoco. ¿Hay alguna forma (algún método) en las API HTML5 que tenga incorporado?

Gracias.

+0

dado que esto se escribe en cadena 'data.length' al menos debería darle la cantidad de caracteres. – Christoph

+0

@Christoph: Sí, como ya he mencionado en mi pregunta. ¿Estás sugiriendo multiplicarlo por un supuesto peso ocupado por byte? –

Respuesta

11

No, no se cruzó el navegador. IE tipo de has it, los otros no. Pero, por supuesto, se puede calcular el tamaño restante en el dominio. Vea los ejemplos a continuación.

Sólo para IE:

var remSpace = window.localStorage.remainingSpace; 

Para FF/Chrome/Safari:

var limit = 1024 * 1024 * 5; // 5 MB 
var remSpace = limit - unescape(encodeURIComponent(JSON.stringify(localStorage))).length; 

Opera: 5 MB es estándar, pero el navegador ofrece para aumentar límite en cuanto aplicaciones requieren más espacio.

+0

Limpio :) Puedo vivir con eso ya que no espero que exceda los 5 MB. –

+0

problema aquí es que se supone que la memoria total es de 5 mb, pero puede ajustar, por ejemplo, ff para aumentar eso. –

+0

Pero el límite parece ser de 10 MB en cromo. Consulte: https://cs.chromium.org/chromium/src/content/common/dom_storage/dom_storage_types.h?dr=C&l=24 – venkatvb

0

Encontré esta pregunta al intentar encontrar mi propia solución a este problema y quería compartir dónde terminé, en caso de que pueda ser útil para otros.

En resumen, cuando agrego un valor a localStorage, pongo su clave en una matriz. Luego, antes de escribir algo más a localStorage, recorro las teclas y obtengo una suma de sus longitudes para asegurarme de que no estoy por encima del umbral con el que me siento cómodo.

Si localStorage es mayor que 2Mb (en este caso), elimina el primer elemento de localStorage, elimina esa entrada de la matriz y luego escribe la nueva entrada.

// check the size of localStorage 

var localStorageArray = []; 
var localStorageSize = 0; 

for (var i=0; i < localStorageArray.length; i++) { 
    localStorageSize += localStorage.getItem(localStorageArray[i]).length; 
} 

// save to localStorage if it has not been saved already 

if (!localStorage.getItem(key)){ 
    if (localStorageSize < 2000000) { 
     localStorage.setItem(key, value); 
     localStorageArray.push(key); 
    } else { 
     localStorage.removeItem(localStorageArray[0]); 
     localStorageArray.shift(); 
     localStorage.setItem(key, value); 
     localStorageArray.push(key); 
    } 
} 
+0

Gracias por publicar. ¿Pero no es esto comprobar si hay 2 millones de caracteres de "valor"? ¿Qué pasa con los tamaños de las 'claves'? Además, ¿no debería estar contrastando con '1024 * 1024 * 2' (por 2 MB)? –

Cuestiones relacionadas