Obecnie tworzę witrynę, która będzie korzystać z localStorage HTML5. Przeczytałem wszystko o ograniczeniach rozmiaru dla różnych przeglądarek. Jednak nie widziałem nic, jak sprawdzić bieżący rozmiar instancji localStorage.To pytanie wydaje się wskazywać, że JavaScript nie ma wbudowanego sposobu pokazywania rozmiaru dla danej zmiennej. Czy localStorage ma właściwość rozmiaru pamięci, której nie widziałem? Czy jest na to łatwy sposób, którego mi brakuje?
Moja witryna ma umożliwiać użytkownikom wprowadzanie informacji w trybie „offline”, więc możliwość ostrzeżenia, gdy pamięć jest prawie pełna, jest bardzo ważna.
javascript
html
local-storage
pochodzenie
źródło
źródło
Odpowiedzi:
Wykonaj ten fragment w konsoli JavaScript (wersja jednowierszowa):
Ten sam kod w wielu wierszach do czytania
lub dodaj ten tekst w polu „lokalizacja” zakładki dla wygodnego użycia
PS Snippets są aktualizowane zgodnie z prośbą w komentarzu. Teraz obliczenia obejmują długość samego klucza. Każda długość jest mnożona przez 2, ponieważ znak w javascript jest przechowywany jako UTF-16 (zajmuje 2 bajty)
PPS powinien działać zarówno w przeglądarce Chrome, jak i Firefox.
źródło
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
przerywa to. Po prostu usuń podkreślenie.Wychodząc z tego, co @Shourav powiedział powyżej, napisałem małą funkcję, która powinna dokładnie pobrać wszystkie
localStorage
klucze (dla bieżącej domeny) i obliczyć łączny rozmiar, abyś wiedział dokładnie, ile pamięci zajmuje twójlocalStorage
obiekt:Mój wrócił:
"30.896484375 KB"
źródło
IE ma właściwość pozostałej przestrzeni obiektu Storage. Inne przeglądarki nie mają obecnie odpowiedników.
Uważam, że domyślna ilość miejsca to 5MB, chociaż osobiście tego nie testowałem.
źródło
Oto prosty przykład, jak to zrobić i powinien działać z każdą przeglądarką
źródło
Mam nadzieję, że to komuś pomoże.
Ponieważ przykład Jas- na jsfiddle u mnie nie działa, wymyśliłem takie rozwiązanie. (podziękowania dla Serge Seletskyy i Shourav za ich bity, których użyłem w poniższym kodzie)
Poniżej znajduje się funkcja, której można użyć do sprawdzenia, ile miejsca jest dostępne dla localStorage i (jeśli jakiekolwiek klucze są już w lS), ile miejsca pozostało.
To trochę brutalna siła, ale działa w prawie każdej przeglądarce ... poza Firefoksem. Cóż, w przypadku FF na komputery stacjonarne ukończenie go zajmuje wieki (4-5 minut), a na Androidzie po prostu ulega awarii.
Pod funkcją znajduje się krótkie podsumowanie testów, które wykonałem w różnych przeglądarkach na różnych platformach. Cieszyć się!
I zgodnie z obietnicą powyżej, niektóre testy w różnych przeglądarkach:
GalaxyTab 10.1
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (Core 2 Duo 2,66 8 Gb pamięci)
iPad 3 iOS 6.1.3
Windows 7 - 64b (pamięć Core 2 Duo 2,93 6Gb)
Wygraj 8 (pod paralelami 8)
źródło
array.forEach()
w twoim kodzie, ponieważ wiem, że nie istnieje w IE, czy implementujesz sam? Jak mierzysz jego udział w ogólnym opóźnieniu?forEach()
. Nie, sam tego nie wdrożyłem, użyłem kolbyArray.prototype.forEach()
. Według Mozilla Developer Network aka MDN z IE9 ma natywne wsparcie.Array.prototype.forEach()
jak najwięcej, jeśli mój projekt nie obsługuje wczesnych wersji IE.while
pętlę na dwie części, pierwszą jak w stackoverflow.com/a/3027249/1235394, która wypełnia localStorage wykładniczo rosnącymi fragmentami danych, a następnie drugą część małe kawałki o stałej wielkości, aby całkowicie zapełnić magazyn. Strona testowa: jsfiddle.net/pqpps3tk/1Bieżący rozmiar danych lokalnego magazynu można uzyskać za pomocą funkcji Blob. To może nie działać w starszych przeglądarkach, sprawdź obsługę
new Blob
iObject.values()
na caniuse.Przykład:
Object.values () zamienia obiekt localStorage na tablicę. Blob zamienia tablicę w surowe dane.
źródło
Blob
nie ogranicza kodowania ciągów do UTF-16, więc może to być najbardziej niezawodna metoda.new Blob(['X']).size;
= 1, podczas gdynew Blob(['☃']).size
(U + 2603 / snowman character) ==> 3. Rozwiązania oparte naString.prototype.length
nie uwzględniają tego (zajmują się „znakami”), podczas gdy limity / limity pamięci prawdopodobnie tak (zajmują się bajtami) i mogę sobie wyobrazić prowadzi to do niespodzianek, na przykład podczas przechowywania znaków innych niż angielskie / ASCII.Możesz obliczyć lokalną pamięć za pomocą następujących metod:
Ostatecznie rozmiar w bajtach zostanie zarejestrowany w przeglądarce.
źródło
Użyłbym kodu @tennisgen, który pobiera wszystko i liczy zawartość, ale liczę same klucze:
źródło
Sposób, w jaki poradziłem sobie z tym problemem, polega na utworzeniu funkcji do znajdowania używanego miejsca i pozostałego miejsca w pamięci lokalnej, a następnie funkcji, która wywołuje te funkcje, aby określić maksymalną przestrzeń dyskową.
źródło
Oprócz odpowiedzi @ serge, która jest tutaj najczęściej głosowana, należy wziąć pod uwagę rozmiar kluczy. Poniższy kod doda rozmiar kluczy przechowywanych w
localStorage
źródło
undefined
do pozycjilength
, w niektórych przypadkach, więc dodałem warunkowa dodaniem:t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Zgodnie ze specyfikacją każdy znak w ciągu ma 16 bitów.
Ale sprawdzenie za pomocą chrome (Ustawienia> Ustawienia treści> Pliki cookie i dane witryn) pokazuje nam, że zainicjowanie localStorage zajmuje 3kB (rozmiar narzutu)
Rozmiar przechowywanych danych jest zgodny z tą relacją (z dokładnością do 1kB)
3 + ((localStorage.x.length * 16) / (8 * 1024)) kB
gdzie localStorage.x jest ciągiem przechowywania.
źródło
// Pamięć jest zajęta przez klucz i wartość, więc zaktualizowany kod.
źródło
Tak, to pytanie zostało zadane jakieś 10 lat temu. Ale dla tych, którzy są zainteresowani (jak ja, ponieważ buduję edytor tekstu offline, który zapisuje dane w lokalnej pamięci) i ssą programowanie, możesz użyć czegoś prostego:
Najlepszym sposobem, aby uzyskać zapełnioną przestrzeń dyskową, jest wyświetlenie ustawień witryny (powiedzmy, jeśli zapisałeś obraz w pamięci lokalnej). Przynajmniej w chrome możesz zobaczyć ilość wykorzystanych bajtów (czyli: 1222 bajty). Jednak najlepsze sposoby na zobaczenie zapełnionej lokalnej pamięci za pomocą js zostały już wspomniane powyżej, więc używaj ich.
źródło
źródło