Je développe actuellement un site qui utilisera localStorage de HTML5. J'ai tout lu sur les limitations de taille pour différents navigateurs. Cependant, je n'ai rien vu sur la façon de connaître la taille actuelle d'une instance localStorage. Cette question semble indiquer que JavaScript n'a pas de méthode intégrée pour afficher la taille d'une variable donnée. Est-ce que localStorage a une propriété de taille de mémoire que je n'ai pas vue? Y a-t-il un moyen facile de faire cela qui me manque?
Mon site est destiné à permettre aux utilisateurs de saisir des informations en mode `` hors ligne '', il est donc très important de pouvoir les avertir lorsque le stockage est presque plein.
javascript
html
local-storage
dérivation
la source
la source
Réponses:
Exécutez cet extrait dans la console JavaScript (version une ligne):
Le même code sur plusieurs lignes pour la lecture
ou ajoutez ce texte dans le champ 'emplacement' d'un signet pour une utilisation pratique
Les extraits PS sont mis à jour en fonction de la demande dans le commentaire. Maintenant, le calcul inclut la longueur de la clé elle-même. Chaque longueur est multipliée par 2 car le caractère dans javascript est stocké en UTF-16 (occupe 2 octets)
PPS devrait fonctionner à la fois dans Chrome et Firefox.
la source
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
brise. Supprimez simplement le trait de soulignement.Partant de ce que @Shourav a dit ci-dessus, j'ai écrit une petite fonction qui devrait saisir avec précision toutes vos
localStorage
clés (pour le domaine actuel) et calculer la taille combinée afin que vous sachiez exactement combien de mémoire est occupée par votrelocalStorage
objet:Le mien est revenu:
"30.896484375 KB"
la source
IE a une propriété restanteSpace de l'objet Storage. Les autres navigateurs n'ont pas d'équivilant pour le moment.
Je pense que la quantité d'espace par défaut est de 5 Mo, même si je ne l'ai pas testé personnellement.
la source
Voici un exemple simple de la façon de procéder et devrait fonctionner avec tous les navigateurs
la source
J'espère que cela aidera quelqu'un.
Parce que Jas- exemple sur jsfiddle ne fonctionne pas pour moi, j'ai trouvé cette solution. (merci à Serge Seletskyy et Shourav pour leurs bits que j'ai utilisés dans le code ci-dessous)
Vous trouverez ci-dessous la fonction qui peut être utilisée pour tester la quantité d'espace disponible pour localStorage et (si des clés sont déjà dans lS) la quantité d'espace restant.
C'est un peu de force brute mais cela fonctionne dans presque tous les navigateurs ... à part Firefox. Eh bien, dans le bureau FF, cela prend du temps (4 à 5 minutes) pour terminer, et sur Android, il se bloque juste.
Sous la fonction se trouve un bref résumé des tests que j'ai effectués dans différents navigateurs sur différentes plates-formes. Prendre plaisir!
Et comme promis ci-dessus, quelques tests dans différents navigateurs:
GalaxyTab 10.1
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (mémoire Core 2 Duo 2,66 8 Go)
iPad 3 iOS 6.1.3
Windows 7 -64b (mémoire Core 2 Duo 2,93 6 Go)
Win 8 (sous Parallels 8)
la source
array.forEach()
dans votre code, comme je sais qu'il n'existe pas dans IE, l'implémentez-vous vous-même? Comment mesurez-vous sa contribution à la latence globale?forEach()
. Non je ne l'ai pas implémenté moi-même, j'ai utilisé le stockArray.prototype.forEach()
. Selon Mozilla Developer Network, alias MDN d'IE9, il dispose d'un support natif.Array.prototype.forEach()
autant que possible si mon projet ne prend pas en charge les premières versions d'IE.while
boucle divisée en deux parties, la première comme dans stackoverflow.com/a/3027249/1235394 qui remplit localStorage avec des blocs de données à croissance exponentielle, puis la deuxième partie avec petits morceaux de taille fixe pour remplir complètement le stockage. Page de test: jsfiddle.net/pqpps3tk/1Vous pouvez obtenir la taille actuelle des données de stockage local à l'aide de la fonction Blob. Cela peut ne pas fonctionner dans les anciens navigateurs, vérifiez le support pour
new Blob
etObject.values()
sur caniuse.Exemple:
Object.values () transforme l'objet localStorage en tableau. Blob transforme le tableau en données brutes.
la source
Blob
cela ne limite pas l'encodage de chaîne à UTF-16, donc cela pourrait en fait être la méthode la plus fiable.new Blob(['X']).size;
= 1 alors quenew Blob(['☃']).size
(U + 2603 / caractère bonhomme de neige) ==> 3. Les solutions basées surString.prototype.length
ne prennent pas cela en compte (traitez les "caractères") alors que les quotas / limites de stockage le font probablement (traitent des octets), et je pourrais imaginer cela entraîne des surprises, par exemple, lors du stockage de caractères non anglais / ASCII.Vous pouvez calculer votre stockage local en utilisant les méthodes suivantes:
Enfin, la taille en octets sera enregistrée dans le navigateur.
la source
J'utiliserais le code de @tennisgen qui récupère tout et compte le contenu, mais je compte les clés elles-mêmes:
la source
La façon dont j'ai abordé ce problème est de créer des fonctions pour découvrir l'espace utilisé et l'espace restant dans le stockage local, puis une fonction qui appelle ces fonctions pour déterminer l'espace de stockage maximal.
la source
En plus de la réponse de @ serge qui est la plus votée ici, la taille des clés doit être prise en compte. Le code ci-dessous ajoutera la taille des clés stockées dans
localStorage
la source
undefined
pour l'élémentlength
dans certains cas, donc j'ai ajouté une condition à l'addition:t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Selon les spécifications, chaque caractère d'une chaîne est de 16 bits.
Mais l'inspection avec chrome (Paramètres> Paramètres de contenu> Cookies et données de site) nous montre que le lancement de localStorage prend 3 Ko (taille de surcharge)
Et la taille des données stockées suit cette relation (précise à 1 Ko)
3 + ((localStorage.x.length * 16) / (8 * 1024)) Ko
où localStorage.x est votre chaîne de stockage.
la source
// La mémoire occupe à la fois la clé et la valeur, donc le code mis à jour.
la source
Oui, cette question a été posée il y a 10 ans. Mais pour ceux qui sont intéressés (comme moi, car je suis en train de créer un éditeur de texte hors ligne qui enregistre les données avec un stockage local) et que la programmation est nulle, vous pouvez utiliser quelque chose de simple comme celui-ci:
La meilleure façon d'obtenir la quantité de stockage remplie est d'afficher les paramètres du site (par exemple, si vous avez stocké une image dans le stockage local). Au moins dans Chrome, vous pouvez voir la quantité d'octets utilisés (c'est-à-dire: 1222 octets). Cependant, les meilleures façons de voir le stockage local rempli avec js ont déjà été mentionnées ci-dessus, alors utilisez-les.
la source
la source