Ich entwickle derzeit eine Site, die den localStorage von HTML5 verwendet. Ich habe alles über die Größenbeschränkungen für verschiedene Browser gelesen. Ich habe jedoch noch nichts darüber gesehen, wie die aktuelle Größe einer localStorage-Instanz ermittelt werden kann. Diese Frage scheint darauf hinzudeuten, dass in JavaScript die Größe für eine bestimmte Variable nicht integriert ist. Hat localStorage eine Speichergrößeneigenschaft, die ich nicht gesehen habe? Gibt es eine einfache Möglichkeit, dies zu tun, die mir fehlt?
Meine Website soll es Benutzern ermöglichen, Informationen in einem "Offline" -Modus einzugeben. Daher ist es sehr wichtig, sie warnen zu können, wenn der Speicher fast voll ist.
javascript
html
local-storage
Ableitung
quelle
quelle
Antworten:
Führen Sie dieses Snippet in der JavaScript-Konsole aus (einzeilige Version):
Der gleiche Code in mehreren Zeilen zum Lesen
oder fügen Sie diesen Text zur bequemen Verwendung in das Feld 'Speicherort' eines Lesezeichens ein
PS-Snippets werden gemäß der Anfrage im Kommentar aktualisiert. Jetzt beinhaltet die Berechnung die Länge des Schlüssels selbst. Jede Länge wird mit 2 multipliziert, da das Zeichen in Javascript als UTF-16 gespeichert wird (2 Bytes belegt).
PPS sollte sowohl in Chrome als auch in Firefox funktionieren.
quelle
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
bricht es. Entfernen Sie einfach den Unterstrich.Ausgehend von dem, was @Shourav oben gesagt hat, habe ich eine kleine Funktion geschrieben, die alle
localStorage
Schlüssel (für die aktuelle Domain) genau erfassen und die kombinierte Größe berechnen soll, damit Sie genau wissen, wie viel Speicher von IhremlocalStorage
Objekt belegt wird:Meins kehrte zurück:
"30.896484375 KB"
quelle
IE hat eine verbleibende Space- Eigenschaft des Speicherobjekts. Die anderen Browser haben derzeit keine Äquivalenz.
Ich glaube, dass der Standardspeicherplatz 5 MB beträgt, obwohl ich ihn nicht persönlich getestet habe.
quelle
Hier ist ein einfaches Beispiel dafür und sollte mit jedem Browser funktionieren
quelle
Hoffe das hilft jemandem.
Da Jas-Beispiel auf jsfiddle für mich nicht funktioniert, habe ich diese Lösung gefunden. (Danke an Serge Seletskyy und Shourav für ihre Bits, die ich im folgenden Code verwendet habe)
Im Folgenden finden Sie die Funktion, mit der Sie testen können, wie viel Speicherplatz für localStorage verfügbar ist und (falls noch Schlüssel in lS vorhanden sind) wie viel Speicherplatz noch vorhanden ist.
Es ist ein wenig brutale Gewalt, aber es funktioniert in fast jedem Browser ... außer in Firefox. Nun, in Desktop-FF dauert es ewig (4-5 Minuten), und unter Android stürzt es einfach ab.
Unter der Funktion befindet sich eine kurze Zusammenfassung der Tests, die ich in verschiedenen Browsern auf verschiedenen Plattformen durchgeführt habe. Genießen!
Und wie oben versprochen einige Tests in verschiedenen Browsern:
GalaxyTab 10.1
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (Core 2 Duo 2.66 8 GB Speicher)
iPad 3 iOS 6.1.3
Windows 7 -64b (Core 2 Duo 2.93 6Gb Speicher)
Gewinnen Sie 8 (unter Parallelen 8)
quelle
array.forEach()
in Ihrem Code gefunden habe, da ich weiß, dass er im IE nicht vorhanden ist, implementieren Sie ihn selbst? Wie messen Sie den Beitrag zur Gesamtlatenz?forEach()
. Nein, ich habe es nicht selbst implementiert, ich habe die Aktie verwendetArray.prototype.forEach()
. Laut Mozilla Developer Network, auch bekannt als MDN von IE9, wird es nativ unterstützt.Array.prototype.forEach()
so viel wie möglich verwenden, wenn mein Projekt frühe IE-Versionen nicht unterstützt.while
Schleife in zwei Teile, der erste wie in stackoverflow.com/a/3027249/1235394 , der localStorage mit exponentiell wachsenden Datenblöcken füllt, dann der zweite Teil mit kleine Stücke mit fester Größe, um den Speicher vollständig zu füllen. TestseiteMit der Blob-Funktion können Sie die aktuelle Größe der lokalen Speicherdaten abrufen. Dies funktioniert möglicherweise nicht in alten Browsern. Überprüfen Sie die Unterstützung für
new Blob
undObject.values()
bei caniuse.Beispiel:
Object.values () wandelt das localStorage-Objekt in ein Array um. Blob wandelt das Array in Rohdaten um.
quelle
Blob
beschränkt die Zeichenfolgencodierung nicht auf UTF-16, daher ist dies möglicherweise die zuverlässigste Methode.new Blob(['X']).size;
= 1 wohingegennew Blob(['☃']).size
(U + 2603 / Schneemannzeichen) ==> 3. Lösungen, die auf basierenString.prototype.length
, berücksichtigen dies nicht (befassen sich mit "Zeichen"), wohingegen Speicherquoten / -grenzen wahrscheinlich (mit Bytes umgehen), und ich könnte mir vorstellen Dies führt zu Überraschungen, beispielsweise beim Speichern von nicht englischen / ASCII-Zeichen.Sie können Ihren lokalen Speicher mit folgenden Methoden berechnen:
Schließlich wird die Größe in Bytes im Browser protokolliert.
quelle
Ich würde den Code von @tennisgen verwenden, der alle abruft und den Inhalt zählt, aber ich zähle die Schlüssel selbst:
quelle
Bei diesem Problem habe ich Funktionen erstellt, um den verwendeten Speicherplatz und den verbleibenden Speicherplatz im lokalen Speicher zu ermitteln, und anschließend eine Funktion, die diese Funktionen aufruft, um den maximalen Speicherplatz zu ermitteln.
quelle
Zusätzlich zu der Antwort von @ serge, über die hier am meisten abgestimmt wird, muss die Größe der Schlüssel berücksichtigt werden. Der folgende Code fügt die Größe der in gespeicherten Schlüssel hinzu
localStorage
quelle
undefined
für das Element zurückgibtlength
, daher habe ich dem Zusatz eine Bedingung hinzugefügt :t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Wie die Spezifikation sagt, ist jedes Zeichen einer Zeichenfolge 16 Bit.
Die Überprüfung mit Chrome (Einstellungen> Inhaltseinstellungen> Cookies und Site-Daten) zeigt jedoch, dass das Initiieren von localStorage 3 KB (Overhead-Größe) erfordert.
Die Größe der gespeicherten Daten folgt dieser Beziehung (auf 1 kB genau)
3 + ((localStorage.x.length * 16) / (8 * 1024)) kB
Dabei ist localStorage.x Ihre Speicherzeichenfolge.
quelle
// Speicher belegt sowohl Schlüssel als auch Wert, also aktualisierter Code.
quelle
Ja, diese Frage wurde wie vor 10 Jahren gestellt. Aber für Interessierte (wie mich selbst, da ich einen Offline-Texteditor baue, der Daten mit lokalem Speicher speichert) und sich für die Programmierung interessieren, könnten Sie etwas Einfaches wie das verwenden:
Der beste Weg, um die Speichermenge zu füllen, besteht darin, die Site-Einstellungen anzuzeigen (z. B. wenn Sie ein Bild im lokalen Speicher gespeichert haben). Zumindest in Chrome können Sie die Anzahl der verwendeten Bytes sehen (dh: 1222 Bytes). Die besten Möglichkeiten, gefüllten lokalen Speicher mit js anzuzeigen, wurden bereits oben erwähnt. Verwenden Sie sie daher.
quelle
quelle