В настоящее время я разрабатываю сайт, который будет использовать localStorage HTML5. Я читал все об ограничениях по размеру для разных браузеров. Однако я ничего не видел о том, как узнать текущий размер экземпляра localStorage. Этот вопрос, кажется, указывает на то, что JavaScript не имеет встроенного способа отображения размера данной переменной. Есть ли у localStorage свойство размера памяти, которого я не видел? Есть ли простой способ сделать это, что мне не хватает?
Мой сайт предназначен для того, чтобы пользователи могли вводить информацию в «автономном» режиме, поэтому очень важно иметь возможность предупреждать их, когда хранилище почти заполнено.
javascript
html
local-storage
вывод
источник
источник
Ответы:
Выполните этот фрагмент в консоли JavaScript (однострочная версия):
Один и тот же код в нескольких строках для чтения
или добавьте этот текст в поле «расположение» закладки для удобства использования
PS Фрагменты обновляются по запросу в комментарии. Теперь в расчет входит длина самого ключа. Каждая длина умножается на 2, потому что символ в javascript хранится как UTF-16 (занимает 2 байта)
PPS Должен работать как в Chrome, так и в Firefox.
источник
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
ломает его. Просто удалите подчеркивание.Исходя из того, что сказал @Shourav выше, я написал небольшую функцию, которая должна точно захватить все ваши
localStorage
ключи (для текущего домена) и вычислить комбинированный размер, чтобы вы точно знали, сколько памяти занимает вашlocalStorage
объект:Мой вернулся:
"30.896484375 KB"
источник
IE имеет remainingSpace свойство объекта хранения. Остальные браузеры в настоящее время не имеют аналогов.
Я считаю, что объем дискового пространства по умолчанию составляет 5 МБ, хотя лично я его не тестировал.
источник
Вот простой пример того, как это сделать, и он должен работать с каждым браузером.
источник
Надеюсь, это кому-то поможет.
Поскольку пример Jas на jsfiddle у меня не работает, я придумал это решение. (спасибо Serge Seletskyy и Shourav за их биты, которые я использовал в коде ниже)
Ниже приведена функция, с помощью которой можно проверить, сколько места доступно для localStorage и (если какие-либо ключи уже находятся в lS) сколько места осталось.
Это небольшая грубая сила, но она работает почти во всех браузерах ... кроме Firefox. Что ж, в настольном FF для завершения требуется время (4-5 минут), а на Android он просто вылетает.
Под функцией находится краткий обзор тестов, которые я провел в разных браузерах на разных платформах. Наслаждайтесь!
И, как было обещано выше, несколько тестов в разных браузерах:
GalaxyTab 10.1
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (Core 2 Duo 2,66 8 ГБ памяти)
iPad 3 iOS 6.1.3
Windows 7 -64b (Core 2 Duo 2,93 6 ГБ памяти)
Победа 8 (в параллелях 8)
источник
array.forEach()
в вашем коде, поскольку я знаю, что его нет в IE, вы реализуете самостоятельно? Как вы измеряете его вклад в общую задержку?forEach()
. Нет, сам не реализовал, использовал стокArray.prototype.forEach()
. Согласно Mozilla Developer Network, также известной как MDN из IE9, он имеет встроенную поддержку.Array.prototype.forEach()
как можно больше, если мой проект не будет поддерживать ранние версии IE.while
цикл на две части, первую, как в stackoverflow.com/a/3027249/1235394, которая заполняет localStorage экспоненциально растущими порциями данных, а затем вторая часть с небольшие фрагменты фиксированного размера для полного заполнения хранилища. Тестовая страница: jsfiddle.net/pqpps3tk/1Вы можете получить текущий размер данных локального хранилища с помощью функции Blob. Это может не работать в старых браузерах, проверьте поддержку
new Blob
иObject.values()
на caniuse.Пример:
Object.values () превращает объект localStorage в массив. Blob превращает массив в необработанные данные.
источник
Blob
что не ограничивает строковую кодировку UTF-16, поэтому это может быть самый надежный метод.new Blob(['X']).size;
= 1, тогда какnew Blob(['☃']).size
(U + 2603 / персонаж снеговика) ==> 3. Решения, основанные на этомString.prototype.length
, не принимают это во внимание (имеют дело с «персонажами»), тогда как квоты / ограничения хранилища, вероятно, учитывают (имеют дело с байтами), и я мог представить это приводило к неожиданностям, например, при хранении неанглийских символов / символов ASCII.Вы можете рассчитать местное хранилище следующими способами:
Наконец, размер в байтах будет зарегистрирован в браузере.
источник
Я бы использовал код @tennisgen, который получает все и считает содержимое, но я считаю сами ключи:
источник
Я решил эту проблему так, чтобы создать функции для определения используемого и оставшегося пространства в локальном хранилище, а затем функцию, которая вызывает эти функции для определения максимального объема хранилища.
источник
В дополнение к ответу @ serge, который получил здесь наибольшее количество голосов, необходимо учитывать размер ключей. Код ниже добавит размер ключей, хранящихся в
localStorage
источник
undefined
для элементаlength
в некоторых случаях, поэтому я добавил условное добавления:t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Согласно спецификации, каждый символ строки составляет 16 бит.
Но проверка с помощью Chrome (Настройки> Настройки контента> Файлы cookie и данные сайта) показывает нам, что запуск localStorage занимает 3 КБ (размер накладных расходов).
И размер хранимых данных следует этому соотношению (с точностью до 1 КБ)
3 + ((localStorage.x.length * 16) / (8 * 1024)) КБ
где localStorage.x - строка вашего хранилища.
источник
// Память занята как ключом, так и значением, поэтому обновленный код.
источник
Да, этот вопрос задавали лет 10 назад. Но для тех, кто интересуется (например, я, поскольку я создаю автономный текстовый редактор, который сохраняет данные в локальном хранилище) и не умеет программировать, вы можете использовать что-то простое, например:
Лучший способ получить заполненный объем хранилища - это просмотреть настройки сайта (например, если вы сохранили изображение в локальном хранилище). По крайней мере, в Chrome вы можете увидеть количество использованных байтов (например, 1222 байта). Однако лучшие способы увидеть заполненное локальное хранилище с помощью js уже упоминались выше, поэтому используйте их.
источник
источник