2012-07-23 3 views
5

Ich benötige eine Möglichkeit, die Gesamtgröße einer Anwendung mithilfe von HTML5 sessionStorage/localStorage zur Laufzeit zu ermitteln.So erhalten Sie die gesamte HTML5-Speichergröße, die von der aktuellen Anwendung verwendet wird

Ich möchte nicht Profiler-basierte Ansätze.

Was ich zur Zeit tun, ist -

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

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

Und dann habe ich diesen Wert in eine Textdatei kopieren und einfügen und die Größe überprüfen.

Hässlich und immer noch hilft mir auch nicht. Gibt es einen Weg (irgendeine Methode) in den HTML5-APIs, die diese eingebaut haben?

Vielen Dank.

+0

Da dies 'data.length' ist, sollte die Zeichenkette mindestens die Anzahl der Zeichen enthalten. – Christoph

+0

@Christoph: Ja, wie ich bereits in meiner Frage erwähnt habe. Schlägst du vor, es mit einer angenommenen Byte-Gewichtung pro Zeichen zu multiplizieren? –

Antwort

11

Nein, nicht über den Browser. IE Art has it, die anderen nicht. Aber natürlich kann verbleibende Größe auf der Domäne berechnet werden. Siehe die folgenden Beispiele.

Für nur IE:

var remSpace = window.localStorage.remainingSpace; 

Für FF/Chrome/Safari:

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

Opera: 5 MB ist Standard, aber der Browser bietet Limit zu erhöhen, wie Anwendungen mehr Platz benötigen.

+0

Ordentlich :) Ich kann damit leben, da ich nicht erwarte, dass es 5 MB überschreitet. –

+0

Problem hier ist, dass insgesamt Speicher angenommen wird, um 5 MB sein, aber Sie können zum Beispiel zwicken, ff, um das zu erhöhen. –

+0

Aber die Grenze scheint 10 MB in Chrom zu sein. Siehe: https://cs.chromium.org/chromium/src/content/common/dom_storage/dom_storage_types.h?dr=C&l=24 – venkatvb

0

Ich fand diese Frage beim Versuch, meine eigene Lösung für dieses Problem zu finden und wollte teilen, wo ich endete, nur für den Fall, dass es für andere hilfreich sein kann.

Kurz gesagt, wenn ich einen Wert zu localStorage hinzufügen, lege ich seinen Schlüssel in ein Array. Dann, bevor ich etwas anderes in localStorage schreibe, durchlaufe ich die Schlüssel und bekomme eine Summe ihrer Längen, um sicher zu sein, dass ich nicht über einer Schwelle bin, mit der ich mich wohl fühle.

Wenn localStorage größer als 2Mb ist (in diesem Fall), entfernt es das erste Element aus localStorage, entfernt diesen Eintrag aus dem Array und schreibt dann den neuen Eintrag.

// 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

Danke für das Posten. Aber prüft das nicht, ob es 2 Millionen "Wert" -Zeichen gibt? Was ist mit Größen der 'Schlüssel'? Auch sollte ich nicht gegen '1024 * 1024 * 2' (für 2 MB) prüfen? –