Saat ini saya mengembangkan situs yang akan menggunakan localStorage HTML5. Saya telah membaca semua tentang batasan ukuran untuk browser yang berbeda. Namun, saya belum melihat apa pun tentang cara mengetahui ukuran instance localStorage saat ini. Pertanyaan ini sepertinya menunjukkan bahwa JavaScript tidak memiliki cara bawaan untuk menampilkan ukuran variabel tertentu. Apakah localStorage memiliki properti ukuran memori yang belum pernah saya lihat? Apakah ada cara mudah untuk melakukan ini yang saya lewatkan?
Situs saya dimaksudkan untuk memungkinkan pengguna memasukkan informasi dalam mode 'offline', jadi sangat penting untuk dapat memberi mereka peringatan ketika penyimpanan hampir penuh.
javascript
html
local-storage
penurunan
sumber
sumber
Jawaban:
Jalankan cuplikan ini di konsol JavaScript (versi satu baris):
Kode yang sama dalam beberapa baris untuk dibaca
atau tambahkan teks ini di bidang 'lokasi' penanda untuk penggunaan yang nyaman
Cuplikan PS diperbarui sesuai permintaan di komentar. Sekarang perhitungannya mencakup panjang kunci itu sendiri. Setiap panjang dikalikan dengan 2 karena karakter di javascript disimpan sebagai UTF-16 (menempati 2 byte)
PPS Seharusnya berfungsi baik di Chrome dan Firefox.
sumber
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
mematahkannya. Hapus saja garis bawah.Berangkat dari apa yang dikatakan @Shourav di atas, saya menulis sebuah fungsi kecil yang harus secara akurat mengambil semua
localStorage
kunci Anda (untuk domain saat ini) dan menghitung ukuran gabungan sehingga Anda tahu persis berapa banyak memori yang diambil olehlocalStorage
objek Anda :Milik saya dikembalikan:
"30.896484375 KB"
sumber
IE memiliki properti sisa ruang dari objek Penyimpanan. Browser lain tidak memiliki persamaan saat ini.
Saya percaya bahwa jumlah ruang default adalah 5MB, meskipun saya belum mengujinya secara pribadi.
sumber
Berikut adalah contoh sederhana tentang cara melakukan ini dan harus bekerja dengan setiap browser
sumber
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!
Dan seperti yang dijanjikan di atas beberapa tes di browser yang berbeda:
GalaxyTab 10.1.0
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (memori Core 2 Duo 2.66 8 Gb)
iPad 3 iOS 6.1.3
Windows 7-64b (memori Core 2 Duo 2,93 6Gb)
Menang 8 (Di Bawah Parallels 8)
sumber
array.forEach()
di kode Anda, karena saya tahu itu tidak ada di IE, apakah Anda menerapkannya sendiri? Bagaimana Anda mengukur kontribusinya terhadap latensi keseluruhan?forEach()
. Tidak, saya belum menerapkannya sendiri, saya menggunakan stokArray.prototype.forEach()
. Menurut Jaringan Pengembang Mozilla alias MDN dari IE9 itu memiliki dukungan asli.Array.prototype.forEach()
sebanyak mungkin jika proyek saya tidak mendukung versi IE awal.while
loop menjadi dua bagian, yang pertama seperti di stackoverflow.com/a/3027249/1235394 yang mengisi localStorage dengan potongan data yang tumbuh secara eksponensial, lalu bagian kedua dengan potongan kecil berukuran tetap untuk mengisi penyimpanan sepenuhnya. Halaman pengujian: jsfiddle.net/pqpps3tk/1Anda bisa mendapatkan ukuran saat ini dari data penyimpanan lokal menggunakan fungsi Blob. Ini mungkin tidak berfungsi di browser lama, periksa dukungan untuk
new Blob
danObject.values()
di caniuse.Contoh:
Object.values () mengubah objek localStorage menjadi sebuah array. Blob mengubah array menjadi data mentah.
sumber
Blob
tidak membatasi pengkodean string ke UTF-16, jadi ini mungkin metode yang paling dapat diandalkan.new Blob(['X']).size;
= 1 sedangkannew Blob(['☃']).size
(U + 2603 / karakter manusia salju) ==> 3. Solusi berdasarkanString.prototype.length
jangan memperhitungkan ini (berurusan dengan "karakter") sedangkan kuota / batas penyimpanan kemungkinan besar (menangani byte), dan saya bisa membayangkan hal ini menimbulkan kejutan, misalnya, saat menyimpan karakter non-Inggris / ASCII.Anda dapat menghitung penyimpanan lokal Anda dengan metode berikut:
Akhirnya ukuran dalam byte akan dicatat di browser.
sumber
Saya akan menggunakan kode @tennisgen yang mendapatkan semua dan menghitung konten, tetapi saya menghitung kuncinya sendiri:
sumber
Cara saya mengatasi masalah ini adalah membuat fungsi untuk mengetahui ruang yang digunakan dan ruang yang tersisa di Penyimpanan Lokal dan kemudian fungsi yang memanggil fungsi-fungsi tersebut untuk menentukan ruang penyimpanan maksimal.
sumber
Selain jawaban @ serge yang paling banyak dipilih di sini, ukuran kunci perlu dipertimbangkan. Kode di bawah ini akan menambah ukuran kunci yang disimpan
localStorage
sumber
undefined
untuk itemlength
dalam beberapa kasus, jadi saya telah menambahkan bersyarat untuk penambahan:t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Sesuai spesifikasi, setiap karakter string adalah 16 bit.
Tetapi memeriksa dengan chrome (Pengaturan> Pengaturan Konten> Cookie & Data Situs) menunjukkan kepada kita bahwa memulai Penyimpanan lokal membutuhkan 3kB (ukuran overhead)
Dan ukuran data yang disimpan mengikuti hubungan ini (akurat hingga 1kB)
3 + ((localStorage.x.length * 16) / (8 * 1024)) kB
di mana localStorage.x adalah string penyimpanan Anda.
sumber
// Memori ditempati oleh kunci dan nilai jadi Kode yang Diperbarui.
sumber
Ya, pertanyaan ini ditanyakan seperti 10 tahun yang lalu. Tetapi bagi mereka yang tertarik (seperti saya, karena saya sedang membangun editor teks offline yang menyimpan data dengan penyimpanan lokal) dan payah dalam pemrograman, Anda dapat menggunakan sesuatu yang sederhana seperti ini:
Cara terbaik untuk mendapatkan jumlah penyimpanan yang terisi adalah dengan melihat pengaturan situs (misalnya, jika Anda menyimpan gambar di penyimpanan lokal). Setidaknya di chrome, Anda dapat melihat jumlah byte yang digunakan (yaitu: 1222 byte). Namun, cara terbaik untuk melihat penyimpanan lokal yang terisi dengan js telah disebutkan di atas, jadi gunakanlah.
sumber
sumber