Nehmen wir an, ich erstelle einen lokalen Speicherschlüssel und gebe ihm eine leere Zeichenfolge. Nimmt der Name des Schlüsselelements den gleichen Platz ein wie der Wert pro Zeichen?
zum Beispiel tut
%Vor%Ist die Anzahl der Schlüssel auch wichtig? zum Beispiel
%Vor% Ich habe einmal eine Funktion gefunden, um die Größe der Objekte localStorage
und sessionStorage
zu berechnen, aber ich kann mich nicht erinnern, wo ich sie gefunden habe.
Hier ist der Code:
%Vor%Ich habe beschlossen, einige Tests in verschiedenen Browsern durchzuführen.
Firefox (37.0.2):
Chrome (42.0.2311.90 m):
IE 11 (11.0.9600.17420):
Opera (29.0.1795.47):
Es sieht also so aus, als ob FireFox, Chrome und Opera (wahrscheinlich auch Safari, aber ich habe das nicht) alle dasselbe Verhalten haben und Schlüssel viel mehr Platz benötigen als ihre Werte.
Im IE (guter alter IE ...) wird die Implementierung so ausgeführt, dass es egal ist, wie Sie etwas speichern.
Nimmt der Name des Schlüsselelements den gleichen Platz ein wie der Wert würde pro Zeichen?
Nein, das ist nicht nötig. Die Menge an Speicherplatz, die von Schlüssel belegt wird, könnte mehr sein als die Menge an Speicherplatz, die der Wert einnimmt. Aber zusammen sollte der Platz, den Schlüssel und Wert einnehmen, ungefähr 5 MB betragen (, obwohl dies vom Browser abhängt, da es vom Browser abhängig ist )
Sie können diesen Code zum Testen verwenden:
%Vor%Ausgabe in Chrome für den obigen Test:
Also solange comes under 5MB
( Dies ist meist die obere Grenze für die meisten Browser ) Ihr Schlüssel kann beliebig lang sein
Sie können dies selbst bestimmen, indem Sie die JSON stringify
-Methoden verwenden, um das localStorage-Objekt in ein JSON-Objekt umzuwandeln:
Dies wird nicht die tatsächliche Größe des Schlüssels zurückgeben, da Daten als utf16 (2 Bytes) oder utf8 (1 Byte) gespeichert werden können, aber es ist ein guter Proxy für die tatsächliche Größe. Sehen Sie sich unten ein Code-Snippet an:
%Vor%Ich würde sagen, dass dies ein Implementierungsdetail für die tatsächliche Struktur des Speichers auf der Festplatte ist.
In der Praxis wird Ihnen pro Ursprung ein bestimmter Platz zur Verfügung gestellt (normalerweise 5MiB, um den tatsächlichen Speicherplatz zu überprüfen, den Sie verwenden können Test-Tool verknüpft in den MDN-Dokumentationen) und Sie können Daten speichern (sowohl in Bezug auf Schlüssel als auch auf Werte), solange Sie diese Größe nicht überschreiten, wie in einer vorherigen Antwort gezeigt. Also ja, die Schlüssel sind im Speicherkontingent enthalten .
Wie es in dem Test-Tool, das ich eingefügt habe, zeigt, sind Zeichen tatsächlich UTF-16, also nehmen sie 2 Bytes Ihres Speicherkontingents ein.
Beachten Sie auch, dass der Speicher Strings speichert, dh wenn Sie einen großen Float als Schlüssel oder Wert setzen, speichern Sie ihn nicht im Binärformat, sondern als Strings!
%Vor% Tatsächlich, wenn Sie versuchen, typeof der folgenden zu tun, erhalten Sie string
in beiden Fällen
Was den zweiten Teil betrifft, so ist dies in Bezug auf die Speicherung
%Vor%sollte 3 Zeichen Speicherplatz von Ihrem Kontingent nehmen, das sind 3 * 2 Byte bei Verwendung von UTF-16 oder 3 Byte bei Verwendung von UTF-8.
Einen Überblick über lokale Speicherlösungen finden Sie hier Ссылка
Ich habe einen Test in Chrome durchgeführt und konnte nachweisen, dass der Schlüssel genau so viel Speicherplatz belegt wie die Länge.
Mit einem Schlüssel von abc
konnte ich einen Wert der Länge 5242877 setzen. Mit einem Schlüssel von a
konnte ich einen Wert der Länge 5242879 setzen. Wie Sie sehen, entfernen Sie Zeichen aus dem Schlüssel befreit diese 2 für den Wert.
Tags und Links javascript html5 local-storage