Umarım bu birine yardımcı olur.
Jsfiddle'daki Jas- example benim için işe yaramadığı için bu çözümü buldum. (Aşağıdaki kodda kullandığım bitleri için Serge Seletskyy ve Shourav'a teşekkürler)
Aşağıda localStorage için ne kadar alan kaldığını ve (eğer herhangi bir anahtar zaten lS'de ise) ne kadar alan kaldığını test etmek için kullanılabilecek fonksiyon aşağıdadır.
Biraz kaba bir güç ama Firefox dışında hemen hemen her tarayıcıda çalışıyor. Masaüstü FF'de tamamlanması uzun sürüyor (4-5 dakika) ve Android'de çöküyor.
İşlevin altında, farklı platformlarda farklı tarayıcılarda yaptığım testlerin kısa bir özeti var. Zevk almak!
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
}
Ve yukarıda söz verildiği gibi, farklı tarayıcılarda bazı testler:
GalaxyTab 10.1
- Maxthon Pad 1.7 ~ 1130ms 5Mb
- Firefox 20.0 (Beta 20.0) her ikisini de kilitledi
- Chrome 25.0.1364.169 ~ 22250ms / 5Mb
- Yerel (Safari 4.0 / Webkit534.30 olarak tanımlanır) ~ 995ms / 5Mb
iPhone 4s iOS 6.1.3
- Safari ~ 520ms / 5Mb
- HomeApp olarak ~ 525ms / 5Mb
- iCab ~ 710 ms / 5 mb
MacBook Pro OSX 1.8.3 (Core 2 Duo 2.66 8 Gb bellek)
- Safari 6.0.3 ~ 105ms / 5Mb
- Chrome 26.0.1410.43 ~ 3400ms / 5Mb
- Firefox 20.0 300150ms (!) / 10Mb (betiğin uzun süre çalışmasından şikayet ettikten sonra)
iPad 3 iOS 6.1.3
- Safari ~ 430ms / 5Mb
- iCab ~ 595 ms / 5 mb
Windows 7 -64b (Core 2 Duo 2.93 6Gb bellek)
- Safari 5.1.7 ~ 80ms / 5Mb
- Chrome 26.0.1410.43 ~ 1220ms / 5Mb
- Firefox 20.0 228500ms (!) / 10Mb (komut dosyasının uzun süre çalışmasından şikayet ettikten sonra)
- IE9 ~ 17900ms /9.54Mb (kodda herhangi bir console.log varsa DevTools açılana kadar çalışmaz)
- Opera 12.15 ~ 4212ms /3.55Mb (bu 5Mb seçildiğinde olur, ancak Opera lS miktarını artırmak isteyip istemediğimizi güzelce sorar, ne yazık ki test arka arkaya birkaç kez yapılırsa çöker)
Kazanın 8 (Paralellikler Altında 8)