dépassant localStorage Quota (localStorage taille != taille de téléchargement de fichier) & comment vérifier localStorage taille
Je ne pouvais pas penser à un bon titre, donc j'espère que ça va le faire.
Ce que je suis en train de faire est de créer un mode hors connexion webapp HTML5. "Pour certaines raisons," je ne veux pas que certains fichiers soient placés dans le manifeste de cache, mais au lieu de cela, je veux placer le contenu dans le localStorage.
Tous les tests sont effectués dans Google Chrome pour Mac/Mac OS 10.6.6
J'ai 4 .Des fichiers JSON qui sont exactement 3,120,792
octets la taille totale. Lors de la première visite (en ligne) pour l'application, je suis en tirant vers le bas ce contenu JSON et de le placer dans une variable de type chaîne, dire str
. Avant de stocker la chaîne JSON, je suis le décapage de tous les \n
et \t
, et le remplacement de \"
avec '
, afin de minimiser la longueur de la chaîne.
Voici les longueurs de chaîne (str.longueur en Chrome de la console):
original str : 3,117,764 (this is a concatenation of the contents of the 4 JSON files)
reformatted JSON: 2,732,249 (not too shabby - should save me a few bytes)
CEPENDANT, maintenant, quand j'essaie de magasin de cette chaîne dans localStorage, j'obtiens une erreur que j'ai dépassé la taille de la mémoire cache (Error: QUOTA_EXCEEDED_ERR: DOM Exception 22
). MAIS il n'y a RIEN d'autre en cache de cette page (j'ai supprimé manuellement tous Google Chrome fichiers de cache).
Pourquoi est-ce arrivé?
Quelle est la taille de la chaîne lorsque stockés dans le cache?
Comment puis-je réduire cette taille pour faire le meilleur usage de localStorage?
édité pour ajouter:
J'ai essayé de ne sauver que 1 000 000 de caractères de la chaîne en localStorage (localStorage.setItem('x',str.substr(1,1000000)
). Quand j'ai vérifié le localStorage la taille du fichier en Chrome du cache de dossier, il est de 2 mo. C'est une db sqlite. On dirait le navigateur à l'aide de la réelle localStorage taille de base de données, pas de la taille des données stockées à l'intérieur. Qui, bien sûr, le suce, mais il est probablement le comportement standard. Je suppose que la chaîne la plus longue, vous pouvez stocker dans le localStorage est quelque part autour de 2 500 000 caractères?
Merci, Bruce. Je sais au sujet de la limite de 5mo, mais j'ai été déconcerté parce que je n'ai d'alimentation localStorage 3mb. Je n'ai pas de compte pour l'sqlite généraux de l'.'...btw, ton idée est intéressante, et je pense que je vais l'essayer, si ce n'est pour voir à quelle vitesse ça va être 🙂 j/k 🙂
OriginalL'auteur ampersand | 2011-04-28
Vous devez vous connecter pour publier un commentaire.
http://jsfiddle.net/brucealdridge/j6KdJ/
De 2 500 000 caractères fonctionne sur le mien ("5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/10.10 Chrome/12.0.742.9 Chrome/12.0.742.9 Safari/534.30")
3 000 000 de ne pas. Je pensais qu'il pourrait me un encodage chose, mais j'ai juste vérifié, et il n'est pas
2,605,000
caractères écrits sur MAC OS 10.6.6 avec google Chrome 11.0.696.57...hein, je suppose que je vais devoir utiliser le cache manifest après tout, comme il va stocker pratiquement n'importe quel fichier exactement comme vous le servir. Merci, Bruce.Trouvé la réponse ... c'était encodage .. voir stackoverflow.com/questions/2747285/... son dans les commentaires de l'questions "Webkit-les navigateurs basés sur l'utilisation de l'UTF-16 pour le stockage de nantis à 2,5 MO limite"
ahh, c'est malheureux. Merci pour l'info, Bruce! J'ai réécrit mon appli pour utiliser le cache manifest pour ces fichiers JSON.
OriginalL'auteur Bruce Aldridge
Un bon moyen de savoir comment beaucoup de charactere peuvent être stockées dans le localstorage est à l'essai grâce à ce lien : http://arty.name/localstorage.html.
Taille dépend du Navigateur HTML5 mise en œuvre
Mon dernier test :
Chrome 13/Safari 5/IPAD 2 :2.600.000 chr
FIREFOX 4 : 5.200.000
OPERA 11 : illimité
OriginalL'auteur ouaf
Bizarre qu'une réponse illustrant max montant serait acceptée. Ne devriez-vous pas être la vérification de la taille actuelle de tous les localStorage paires clé/valeur, moins le max des limites mises en œuvre par les navigateurs?
Ici est un jsfiddle pour illustrer cette utilisation. Et pour ceux qui veulent une réponse simple d'utiliser le bit suivant de js...
Mise à JOUR: Ce snippit est beaucoup plus précis.
Pourriez-vous fournir une liste de ces limites par navigateur?
Voici une bonne ressource qui a été mentionné dans une autre réponse: arty.name/localstorage.html. Ne donne pas de limites exactes, mais d'une fourchette. Vous pouvez l'utiliser comme un point de départ pour travailler à la limite exacte.
Étrange, selon le w3c spec w3.org/TR/webstorage/#disk-space ils devraient tous être à l'aide de 5 MO
OriginalL'auteur jas-