2012-07-23 13 views
5

Potrzebuję sposób, aby znaleźć całkowity rozmiar podjęte przez aplikację przy użyciu HTML5 sessionStorage/localStorage w czasie wykonywania.Jak uzyskać całkowity rozmiar pamięci html5 używanej przez bieżącą aplikację

Nie chcę podejść opartych na profilowaniu.

Co mam obecnie robi to -

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

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

A potem skopiować i wkleić tę wartość w pliku tekstowym i sprawdzić rozmiar.

Brzydki i nadal mi nie pomaga. Czy istnieje sposób (dowolna metoda) w API HTML5, które mają to wbudowane?

Dziękuję.

+0

ponieważ jest to usztywniona 'data.length' powinna co najmniej podać liczbę znaków. – Christoph

+0

@ Christoph: Tak, jak już wspomniałem w moim pytaniu. Czy sugerujesz pomnożenie przez jakiś przypuszczalny bajt wagi na znak? –

Odpowiedz

11

Nie, bez przeglądarki krzyżowej. IE rodzaju has it, inni nie. Ale oczywiście pozostały rozmiar pozostawiony w domenie może zostać obliczony. Zobacz poniższe przykłady.

Tylko IE:

var remSpace = window.localStorage.remainingSpace; 

Dla FF/Chrome/Safari:

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

Opera: 5 MB w standardzie ale przeglądarka oferuje zwiększenie limitu jak aplikacje wymagają więcej miejsca.

+0

Schludnie :) Mogę z tym żyć, ponieważ nie spodziewam się, że przekroczy 5 MB. –

+0

Problem polega na tym, że zakłada się, że całkowita pamięć wynosi 5 MB, ale można ją poprawić na przykład, ff, aby ją zwiększyć. –

+0

Ale limit wygląda na 10 MB w chromie. Zobacz: https://cs.chromium.org/chromium/src/content/common/dom_storage/dom_storage_types.h?dr=C&l=24 – venkatvb

0

Znalazłem to pytanie, próbując znaleźć własne rozwiązanie tego problemu i chciałbym podzielić się tym, na czym skończyłem, na wszelki wypadek, gdy może okazać się pomocne dla innych.

Krótko mówiąc, kiedy dodam wartość do localStorage, umieszczam jej klucz w tablicy. Następnie, zanim napiszesz coś innego do localStorage, przechodzę przez klawisze i uzyskujemy sumę ich długości, aby mieć pewność, że nie przekraczam progu, który mi odpowiada.

Jeśli localStorage jest większy niż 2Mb (w tym przypadku), to usuwa pierwszy element z localStorage, usuwa ten wpis z tablicy, a następnie zapisuje nowy wpis.

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

Dziękujemy za publikację. Ale czy to nie jest sprawdzanie, czy istnieją 2 miliony znaków "wartości"? A co z rozmiarami "kluczy"? Nie powinienem też sprawdzać przy "1024 * 1024 * 2" (na 2 MB)? –

Powiązane problemy