Как мне справиться с ограничениями размера для веб-хранилища?

#javascript #exception #cross-browser

#javascript #исключение #кроссбраузерность

Вопрос:

Спецификация W3C для веб-хранилища (в просторечии известная как локальное хранилище HTML5, хотя это неправильное название) позволяет агентам пользователей устанавливать ограничение по размеру, которое рекомендуется на уровне 5 МБ. Согласно различным источникам, которые я нашел в Сети, многие современные браузеры используют это ограничение в 5 МБ, за исключением IE, который дает 10 МБ.

Во-первых, я хочу знать, применяется ли ограничение к общему количеству localStorage и sessionStorage или к ним по отдельности?

Теперь, как мы на самом деле справляемся с этими ограничениями? Есть ли какой-либо способ узнать, каков предел для конкретного браузера? Есть ли какой-либо веб-сайт, который ведет статистику в разных браузерах? Возникает ли исключение, когда браузер превышает ограничение? Есть ли надежный способ проверить наличие этого «класса» исключений в разных браузерах?

Комментарии:

1. Вы нашли хороший ответ на этот вопрос?

2. Нет, не совсем. Что еще хуже, есть один основной браузер (я забыл, какой именно), который отображает диалоговое окно, если веб-сайт пытается превысить лимит хранилища. Веб-разработчик не может настроить это сообщение, поэтому в нем будет просто сказано что-то вроде «этот веб-сайт пытается превысить лимит хранилища», что является очень плохим пользовательским опытом. В связи с этим моя компания решила не использовать локальное хранилище для нашего варианта использования и просто использовать механизм кэширования браузера по умолчанию вместо этого с URL-адресами, которые «выглядят» как файлы javascript, но на самом деле просто содержат динамически генерируемые определения объектов.

3. Я написал модуль, который заботится о том, чтобы общаться с localStorage таким образом, чтобы он никогда не превышал максимально допустимый, если он превышает 4 МБ, он очищает самые старые записи, которые у него есть, пока он не опустится ниже 3 МБ. также количество байтов, используемое в каждый момент времени, обновляется каждый раз, когда система добавляет или удаляет из него, что означает, что вы можете получить текущее используемое количество байтов со временем поиска big-o 1.

Ответ №1:

AFAIK, в localStorage object нет метода для определения его размера. Однако попытка записать объем данных, превышающий лимит хранилища, приведет к исключению, которое вы можете перехватить.

Взгляните на http://arty.name/localstorage.html

В принципе, вы можете обернуть функцию записи в try...catch блок, подобный этому:

 function write(value, name) {
    try {
        localStorage.field = value;
        return true;
    } catch (e) {
        return false;
    }
}
  

Комментарии:

1. Привет, да, я видел пример на этом сайте, и после моего поста я заметил, что он улавливает исключение. Однако я подумал, есть ли способ проверить, имеет ли это исключение правильную форму? Например, в моем браузере (Firefox) имя исключения — «NS_ERROR_DOM_QUOTA_REACHED», но я думаю, что это специфично для Firefox. Я думаю, что должна быть какая-то библиотека для решения подобных задач!!

2. Кроме того, для этого сайта было неясно, предназначена ли квота как для localStorage, так и для sessionStorage, или только для одного или другого…