Я не мог придумать хорошего заголовка, так что надеюсь, что он подойдет.
Я занимаюсь созданием автономного веб-приложения на HTML5.«По определенным причинам» я не хочу, чтобы некоторые файлы помещались в манифест кэша, но вместо этого я хочу поместить содержимое в localStorage.
Все тестирование выполняется в Google Chrome для Mac / Mac OS 10.6.6
У меня есть 4 файла .JSON, которые имеют размер 3,120,792
байт.При первом посещении (онлайн) приложения я извлекаю этот контент JSON и помещаю его в одну строковую переменную, скажем str
.Перед сохранением строки JSON я удаляю все \n
и \t
и заменяю \"
на '
, чтобы минимизировать длину строки.
Вот длина строки (длина строки вКонсоль Chrome):
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)
ОДНАКО, теперь, когда я пытаюсь сохранить эту строку в localStorage, я получаю сообщение об ошибке, превышающей размер кэша (Error: QUOTA_EXCEEDED_ERR: DOM Exception 22
).НО НИЧЕГО еще не кэшировано для этой страницы (я вручную удалил все файлы кеша Google Chrome).
Почему это происходит?
Каков размер строки при хранении в кеше?
Как можно уменьшить этот размер, чтобы наилучшим образом использовать localStorage?
отредактировано, чтобы добавить: я попытался сохранить только 1 000 000 символов строки в localStorage (localStorage.setItem('x',str.substr(1,1000000)
).Когда я проверял размер файла localStorage в папке кэша Chrome, он составлял 2 МБ.Это sqlite дБ.Похоже, что браузер использует фактический размер базы данных localStorage, а не размер данных, хранящихся в нем.Что, конечно, отстой, но, вероятно, стандартное поведение.Я полагаю, самая длинная строка, которую вы можете хранить в localStorage, где-то около 2 500 000 символов?