Semoga ini membantu seseorang.
Karena Jas- example di jsfiddle tidak berfungsi untuk saya, saya datang dengan solusi ini. (terima kasih kepada Serge Seletskyy dan Shourav untuk bit mereka yang saya gunakan dalam kode di bawah)
Di bawah ini adalah fungsi yang dapat digunakan untuk menguji seberapa banyak ruang yang tersedia untuk localStorage dan (jika ada kunci yang sudah ada di lS) berapa banyak ruang yang tersisa.
Ini adalah sedikit kekerasan tetapi bekerja di hampir semua browser ... selain Firefox. Nah di FF desktop dibutuhkan waktu lama (4-5 menit) untuk menyelesaikannya, dan di Android itu hanya macet.
Di bawah fungsinya adalah ringkasan singkat dari tes yang telah saya lakukan di browser yang berbeda pada platform yang berbeda. Nikmati!
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
}
Dan seperti yang dijanjikan di atas beberapa tes di browser yang berbeda:
GalaxyTab 10.1.0
- Maxthon Pad 1.7 ~ 1130ms 5Mb
- Firefox 20.0 (Beta 20.0) mengalami crash keduanya
- Chrome 25.0.1364.169 ~ 22250ms / 5Mb
- Asli (diidentifikasi sebagai Safari 4.0 / Webkit534.30) ~ 995ms / 5Mb
iPhone 4s iOS 6.1.3
- Safari ~ 520ms / 5Mb
- Sebagai HomeApp ~ 525ms / 5Mb
- iCab ~ 710ms / 5mb
MacBook Pro OSX 1.8.3 (memori Core 2 Duo 2.66 8 Gb)
- Safari 6.0.3 ~ 105ms / 5Mb
- Chrome 26.0.1410.43 ~ 3400ms / 5Mb
- Firefox 20.0 300150ms (!) / 10Mb (setelah mengeluh tentang skrip yang berjalan terlalu lama)
iPad 3 iOS 6.1.3
- Safari ~ 430ms / 5Mb
- iCab ~ 595ms / 5mb
Windows 7-64b (memori Core 2 Duo 2,93 6Gb)
- Safari 5.1.7 ~ 80ms / 5Mb
- Chrome 26.0.1410.43 ~ 1220ms / 5Mb
- Firefox 20.0 228500ms (!) / 10Mb (setelah mengeluh tentang skrip yang berjalan terlalu lama)
- IE9 ~ 17900ms /9.54Mb (jika ada console.logs di dalam kode tidak berfungsi sampai DevTools dibuka)
- Opera 12.15 ~ 4212ms /3.55Mb (ini adalah saat 5Mb dipilih, tetapi Opera bertanya dengan baik apakah kami ingin meningkatkan jumlah lS, sayangnya itu macet jika pengujian dilakukan beberapa kali berturut-turut)
Menang 8 (Di Bawah Parallels 8)