Управление автономным хранилищем HTML5

HTML5 представил множество API-интерфейсов хранения, которые позволяют хранить большие объемы данных локально в браузерах ваших пользователей. Но объем места, выделенного для каждого приложения, по умолчанию ограничен несколькими мегабайтами. Google Chrome позволяет вам запросить большую квоту хранилища, превышающую предыдущий предел в 5 МБ.

Этот документ знакомит вас с основными понятиями о типах хранилища, используемых в Chrome, и описывает экспериментальный API управления квотами, который позволяет вам управлять квотой хранилища. В документе предполагается, что вы уже знакомы с общими концепциями клиентского хранилища и умеете использовать автономные API.

Содержание

  1. Типы хранения
    1. Временный
    2. Настойчивый
    3. Безлимитный
    4. Сравнение типов хранилищ
  2. Управление вашей квотой
    1. Использование и доступность хранилища запросов
    2. Попросите больше места для хранения
    3. Сбросить квоту для тестирования
  3. Справочник по API
    1. Константы
    2. Обзор метода
    3. Методы
  4. Будущее развитие

Типы хранения

В Google Chrome вы можете запросить три типа хранилища:

Эти типы хранилищ более подробно описаны в следующих разделах и сравниваются друг с другом в таблице ниже.

Временное хранение

Временное хранилище — это временное хранилище, доступное любому веб-приложению. Chrome автоматически предоставляет вашему приложению временное хранилище, поэтому вам не нужно запрашивать выделение.

Совместное использование бассейна

Временное хранилище используется всеми веб-приложениями, работающими в браузере. Общий пул может занимать до 1/3 доступного дискового пространства. Хранилище, уже используемое приложениями, включается в расчет общего пула; то есть расчет основан на (available storage space + storage being used by apps) * .333 .

Каждое приложение может иметь до 20 % общего пула. Например, если общее доступное дисковое пространство составляет 60 ГБ, общий пул — 20 ГБ, а приложение может иметь до 4 ГБ. Рассчитывается из 20% (до 4 ГБ) от 1/3 (до 20 ГБ) доступного дискового пространства (60 ГБ).

Просит больше места

Хотя вы можете запросить объем места для хранения, доступного для вашего приложения, и объем данных, уже сохраненных для вашего приложения, вы не можете запросить больше места для временного хранения. Если приложение превышает выделенную квоту, выдается ошибка.

Недостаточно места для хранения

При превышении квоты хранилища для всего пула все данные, хранящиеся на хосте, который использовался реже всего, удаляются. Однако браузер не удаляет данные из LocalStorage и SessionStorage. Что касается данных, хранящихся в других автономных API, браузер удаляет данные полностью, а не частично, чтобы данные приложения не были повреждены неожиданным образом.

Поскольку каждое приложение ограничено максимум 20 % пула носителей, удаление возможно только в том случае, если пользователь активно запускает более пяти автономных приложений, каждое из которых использует максимальное пространство для хранения.

Однако доступное пространство для хранения может сокращаться по мере того, как пользователи добавляют больше файлов на свои жесткие диски. Когда доступного дискового пространства становится недостаточно (помните, что общий пул получает только половину текущего доступного дискового пространства), браузер удаляет все данные, хранящиеся на хосте, который использовался реже всего.

Постоянное хранилище

Постоянное хранилище — это хранилище, которое остается в браузере, пока пользователь не удалит его. Он доступен только для приложений, использующих API файловой системы, но со временем будет доступен и для других автономных API, таких как IndexedDB и Application Cache.

Приложение может иметь большую квоту для постоянного хранилища, чем для временного хранилища, но вы должны запросить хранилище с помощью API управления квотами, а пользователь должен предоставить вам разрешение на использование большего пространства. Chrome представляет информационную панель, которая предлагает пользователю предоставить приложению больше места в локальном хранилище.

Неограниченное хранилище

Неограниченное хранилище похоже на постоянное хранилище, но оно доступно только для приложений и расширений Chrome (файлы .crx). Размер безлимитного хранилища ограничен только наличием места на жестком диске пользователя. Вы можете запросить разрешение unlimitedStorage в файле манифеста для приложения или расширения . При установке пользователь информируется о разрешениях, необходимых приложению или расширению. Продолжая установку, пользователь неявно предоставляет разрешение для всех страниц, URL-адреса которых указаны в файле манифеста.json.

Дополнительную информацию см. в соответствующих руководствах для разработчиков приложений и расширений .

Сравнение типов хранилищ

В следующей таблице описаны различия между тремя типами хранилища.

Временное хранение Постоянное хранилище Неограниченное хранилище
Основное описание

Временное хранилище, доступное любому веб-приложению.

Это происходит автоматически и не требует запроса.

Постоянное хранилище, которое должно быть запрошено через API управления квотами и предоставлено пользователями.

Постоянное хранилище для расширений и приложений Chrome.

Он задается в файле манифеста и должен быть предоставлен пользователями.

Доступность

Все веб-приложения.

Все веб-приложения. Уникально для расширений Chrome , а также размещенных и установленных веб-приложений .
Разрешение Никто. Вы можете использовать его, не запрашивая явно.

Вам необходимо запросить дополнительное пространство для хранения с помощью API управления квотами.

Вы можете запросить разрешение unlimitedStorage в файле манифеста для приложения или расширения .
Пользовательский опыт при первом использовании Невидимый для пользователя. Приложение просто запускается.

Chrome отображает информационную панель, предлагающую пользователю принять или отклонить запрос на хранение.

Но если объем запрошенной вами квоты на самом деле меньше текущего распределения приложения, запрос не отображается. Большая квота сохраняется.

При установке пользователь информируется о разрешениях, необходимых приложению или расширению. Продолжая установку, пользователь неявно предоставляет разрешение для всех страниц, URL-адреса которых указаны в файле манифеста.json для приложения или расширения .

Пользовательский опыт при последующих запросах на увеличение объема хранилища Непригодный. Вы не можете запросить дополнительное временное хранилище.

Chrome снова запросит у пользователя запрос.

Chrome не запрашивает пользователя после установки, независимо от запросов приложения или расширения на увеличение квоты.
Постоянство данных

Переходный. Браузер может удалить данные.

Настойчивый. Браузер не удаляет данные, если пользователь не прикажет ему это сделать. Данные доступны при последующих обращениях.

Не предполагайте, что данные постоянны, поскольку пользователь может их удалить.

То же, что и постоянное хранилище.

Место для хранения по умолчанию

До 20% от общего пула.

0 МБ. Вы должны явно запросить определенное место для хранения.

0 МБ. Вы должны явно запросить unlimitedStorage в файле манифеста.

Если вы не укажете требования к хранилищу, Chrome выделит приложению место из общего пула временного хранилища.

Максимальное пространство для хранения До 20% от общего пула. Размер равен свободному пространству на жестком диске. У него нет фиксированного пула хранения. Размер равен свободному пространству на жестком диске.
Рекомендуемый вариант использования Кэширование. Приложения, которые работают офлайн или имеют большое количество ресурсов. Приложения, предназначенные для работы в Google Chrome.
API, которые могут его использовать

Автономные API

  • Кэш приложения
  • Файловая система
  • ИндекседБД
  • WebSQL ( устарело с 18 ноября 2010 г.)

Примечание. API-интерфейсы веб-хранилища, такие как LocalStorage и SessionStorage, остаются фиксированными на уровне 5 МБ.

API файловой системы

Автономные API

  • Кэш приложения
  • Файловая система
  • ИндекседБД
  • WebSQL (устарело)

Примечание. API-интерфейсы веб-хранилища, такие как LocalStorage и SessionStorage, остаются фиксированными на уровне 5 МБ.

Управление вашей квотой

С помощью API управления квотами, который появился в Chrome 13, вы можете делать следующее:

API реализован с помощью глобального объекта window.webkitStorageInfo .

Справочную документацию смотрите в следующем разделе .

Запрос использования и доступности хранилища

Чтобы запросить размер используемого хранилища и доступное пространство, оставшееся для хоста, вызовите queryUsageAndQuota() со следующей командой:

  • Тип хранилища, которое вы хотите проверить
  • Успешный обратный вызов

Использование, сообщаемое API, может не соответствовать фактическому размеру пользовательских данных, поскольку каждому хранилищу может потребоваться несколько дополнительных байтов для хранения метаданных. Кроме того, обновления статуса могут происходить с задержкой, в результате чего API не отражает самый последний статус хранилища.

В следующем фрагменте кода показано, как можно запросить место для хранения:

// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
    function(usedBytes, grantedBytes) {
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    },
    function(e) { console.log('Error', e);  }
);

Если вы хотите запросить статус постоянного хранилища, просто замените webkitStorageInfo.TEMPORARY на webkitStorageInfo.PERSISTENT . Перечисление также находится в объекте window (глобальное пространство имен), поэтому вы также можете использовать window.PERSISTENT и window.TEMPORARY .

Просит больше места для хранения

Вам не нужно запрашивать дополнительное временное хранилище, поскольку выделение происходит автоматически, и вы не можете превысить максимальный предел (как описано в таблице ).

Для постоянного хранилища для API файловой системы квота по умолчанию равна 0, поэтому вам необходимо явно запросить хранилище для вашего приложения. Вызовите requestQuota() со следующим:

  • Тип хранилища
  • Размер
  • Успешный обратный вызов

В зависимости от того, что вы просите, происходит следующее:

  • Если вы запрашиваете большую квоту, браузер отображает пользователю информационную панель и предлагает либо предоставить, либо отклонить разрешение на увеличение квоты. В некоторых случаях запрос может быть автоматически отклонен, и будет возвращена текущая или меньшая квота.
  • Если запрашиваемая вами сумма квоты меньше текущего распределения приложения, запрос не отображается.
  • Если вы запросите больше места, чем разрешено, вы получите сообщение об ошибке ( QUOTA_EXCEEDED_ERR ).
  • Если вы снова вызовете requestQuota() после того, как пользователь уже предоставил разрешение, ничего не произойдет. Так что не беспокойтесь о повторном вызове метода.

Ниже показано, как можно запросить больше места для хранения:

// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {
        window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);

    }, function(e) { console.log('Error', e); }
);
});

Сброс квоты на тестирование

Когда вы тестируете хранилище в своем приложении, вам может потребоваться очистить сохраненные данные, чтобы можно было заново протестировать управление квотами в своем приложении. Для этого:

  1. Введите chrome://settings/cookies в омнибоксе (адресной строке).
  2. Найдите свое приложение.
  3. Выберите свое приложение.
  4. Нажмите X справа от выделенного фрагмента.

Справочник по API

В этом разделе описаны методы API управления квотами.

Константы

Ниже приведены константы webkitStorageInfo , которые указывают тип хранилища.

Постоянный Ценить Описание
TEMPORARY 0 Временное хранение.
PERSISTENT 1 Постоянное хранение.

Обзор метода

queryUsageAndQuota
requestQuota

Методы

запросUsageAndQuota

Проверьте размер используемого хранилища и свободное место, оставшееся для хоста.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback : Необязательный обратный вызов с двумя параметрами:

    • Текущее количество байтов, которое использует приложение.
    • Количество байтов, оставшихся в квоте.
  • errorCallback : Необязательный обратный вызов при ошибке.

запросКвота

Попросите больше места для хранения. В браузере отображается информационная панель, предлагающая пользователю предоставить или запретить приложению разрешение на дополнительное хранилище.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
Параметры
  • newQuotaInBytes : количество байтов, которое вы хотите включить в квоту хранилища.
  • successCallback : необязательный обратный вызов, который передает количество предоставленных байтов.
  • errorCallback : Необязательный обратный вызов при ошибке.

Будущее развитие

Планируется поместить все API автономного хранилища HTML5, включая IndexedDB, Application Cache, File System и другие API, которые могут быть указаны, в API управления квотами. С его помощью вы сможете управлять всем распределением хранилища.