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?

diveintohtml5.org/storage.html#limitations dit, vous devriez avoir 5 mo, et d'autres stackoverflow questions corroberate cette. comment sur l'écriture d'une boucle, magasin de 1 char, traction arrière, de l'enregistrer 2 caractères, etc jusqu'à ce que vous frappez une limite?
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