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!
function testLocalStorage() {
var timeStart = Date.now();
var timeEnd, countKey, countValue, amountLeft, itemLength;
var occupied = leftCount = 3; //Shurav's comment on initial overhead
//create localStorage entries until localStorage is totally filled and browser issues a warning.
var i = 0;
while (!error) {
try {
//length of the 'value' was picked to be a compromise between speed and accuracy,
// the longer the 'value' the quicker script and result less accurate. This one is around 2Kb
localStorage.setItem('testKey' + i, '11111111112222222222333333333344444444445555555555666661111111111222222222233333333334444444444555555555566666');
} catch (e) {
var error = e;
}
i++;
}
//if the warning was issued - localStorage is full.
if (error) {
//iterate through all keys and values to count their length
for (var i = 0; i < localStorage.length; i++) {
countKey = localStorage.key(i);
countValue = localStorage.getItem(localStorage.key(i));
itemLength = countKey.length + countValue.length;
//if the key is one of our 'test' keys count it separately
if (countKey.indexOf("testKey") !== -1) {
leftCount = leftCount + itemLength;
}
//count all keys and their values
occupied = occupied + itemLength;
}
;
//all keys + values lenght recalculated to Mb
occupied = (((occupied * 16) / (8 * 1024)) / 1024).toFixed(2);
//if there are any other keys then our 'testKeys' it will show how much localStorage is left
amountLeft = occupied - (((leftCount * 16) / (8 * 1024)) / 1024).toFixed(2);
//iterate through all localStorage keys and remove 'testKeys'
Object.keys(localStorage).forEach(function(key) {
if (key.indexOf("testKey") !== -1) {
localStorage.removeItem(key);
}
});
}
//calculate execution time
var timeEnd = Date.now();
var time = timeEnd - timeStart;
//create message
var message = 'Finished in: ' + time + 'ms \n total localStorage: ' + occupied + 'Mb \n localStorage left: ' + amountLeft + "Mb";
//put the message on the screen
document.getElementById('scene').innerText = message; //this works with Chrome,Safari, Opera, IE
//document.getElementById('scene').textContent = message; //Required for Firefox to show messages
}
Und wie oben versprochen einige Tests in verschiedenen Browsern:
GalaxyTab 10.1
- Maxthon Pad 1,7 ~ 1130 ms 5 MB
- Firefox 20.0 (Beta 20.0) stürzte beide ab
- Chrome 25.0.1364.169 ~ 22250 ms / 5 MB
- Native (identifiziert als Safari 4.0 / Webkit534.30) ~ 995 ms / 5 MB
iPhone 4s iOS 6.1.3
- Safari ~ 520 ms / 5 MB
- Als HomeApp ~ 525ms / 5Mb
- iCab ~ 710 ms / 5 MB
MacBook Pro OSX 1.8.3 (Core 2 Duo 2.66 8 GB Speicher)
- Safari 6.0.3 ~ 105 ms / 5 MB
- Chrome 26.0.1410.43 ~ 3400 ms / 5 MB
- Firefox 20.0 300150ms (!) / 10Mb (nachdem Sie sich über ein zu langes Skript beschwert haben)
iPad 3 iOS 6.1.3
- Safari ~ 430 ms / 5 MB
- iCab ~ 595 ms / 5 MB
Windows 7 -64b (Core 2 Duo 2.93 6Gb Speicher)
- Safari 5.1.7 ~ 80 ms / 5 MB
- Chrome 26.0.1410.43 ~ 1220 ms / 5 MB
- Firefox 20.0 228500ms (!) / 10Mb (nachdem Sie sich über ein zu langes Skript beschwert haben)
- IE9 ~ 17900ms /9.54Mb (wenn sich console.logs im Code befinden, funktioniert dies erst, wenn DevTools geöffnet werden)
- Opera 12.15 ~ 4212ms /3.55Mb (dies ist, wenn 5Mb ausgewählt ist, aber Opera fragt freundlich, ob wir die Menge an lS erhöhen möchten, leider stürzt es ab, wenn der Test einige Male hintereinander durchgeführt wird)
Gewinnen Sie 8 (unter Parallelen 8)