Ограничения хранилища в браузере Chrome
Каков мягкий предел (при котором пользователь должен дать разрешение на превышение)? Что такое жесткий лимит (максимально допустимый).
5 ответов
Предупреждение - эта информация устарела - см. Другой ответ ниже.
Chrome имеет мягкий предел в 5 Мб, прежде чем он достигнет QUOTA_ERR
, Вот ссылка MDN на этот факт.
В спецификации упоминается QuotaExceededError
но, кажется, ничего не говорит о том, когда это должно быть брошено.
QuotaExceededError Операция завершилась неудачно, так как не хватило места на диске или была достигнута квота хранилища, и пользователь отказался предоставить больше места для базы данных.
Я не слышал о жестком пределе и не достиг такого в моем собственном развитии. Производительность должна идти довольно далеко на юг, прежде чем вы достигнете.
Основное правило составляет 6% (отредактировано 2015-Jul: было 10%) от доступного пространства на жестком диске пользователя, меньше, если ваш источник использует websql, appcache или api файловой системы. Документ MDN с упоминанием 5 МБ устарел и был обновлен. Горькие подробности о текущей политике находятся здесь: https://developer.chrome.com/apps/offline_storage
Обратите внимание на некоторые раздражающие тонкости:
- Не существует PERSISTENT хранилища для indexeddb, применяется только материал в ссылке выше о TEMPORARY.
- Как только ваш источник исчерпает свою долю пула,
транзакции indexeddb бесполезно прервутся без реального указания причины.На данный момент единственный способ определить, что причиной является отсутствие квоты, - это использовать queryUsageAndQuota, чтобы проверить, сколько места осталось.Надеюсь, что в следующих случаях будущая версия Chrome будет правильно заполнять IDBTransaction.error.Изменить: Chrome 26 теперь правильно заполняет IDBTransaction.error с QuotaExceededError. - В настоящее время нет API для запроса большего пространства для хранения indexeddb.
Проверьте квоту с помощью следующего кода в chrome>dev tools(F12)>console
// Request storage usage and capacity left
window.webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.TEMPORARY,
//the type can be either TEMPORARY or PERSISTENT
function(used, remaining) {
console.log("Used quota: " + used + ", remaining quota: " + remaining);
}, function(e) {
console.log('Error', e);
} );
Вопрос о Chrome и тэгах IndexedDB. И я предполагаю, что речь идет о веб-сайтах, а не о расширениях или приложениях Chrome (которые позволяют неограниченное хранилище для IndexedDB).
Для веб-сайтов IndexedDB - это API для временного хранилища Chrome ( источник). Таким образом, вопрос о квоте для временного хранения в Chrome.
В Chrome 67 изменилось поведение квот, и это на самом деле не задокументировано, за исключением отчета об ошибках. Взятые вместе, текущее поведение квоты:
В нормальном режиме Chrome
Для автономных API (кэш приложений, файловая система, IndexedDB, WebSQL):
Если выбрано значение "должно оставаться доступным", квота для одного источника ("сайт") будет равна нулю. Значение "должно оставаться доступным" относится к пространству для свободного хранения в хранилище. Начиная с Chrome 67, это нижнее значение "2 ГиБ" и "10% от общей емкости накопителя" ( источник). Как только этот предел достигнут, дополнительные записи во временное хранилище не будут выполнены, но существующие данные во временном хранилище не будут удалены.
Если значение "должно оставаться доступным" еще не достигнуто, квота составит 20% от общего пула ( источника). Это (вероятно) означает "20% всех данных во временном хранилище, уже сохраненных Chrome, плюс все данные, которые Chrome может сохранить в локальном хранилище, не нажимая значение" должно оставаться доступным "".
Для API веб-хранилищ (LocalStorage, SessionStorage, …): исправлено 5 МБ ( источник); Я не знаю, влияет ли это на ограничение "должно оставаться доступным", описанное выше.
В режиме Chrome Incognito
IndexedDB выделяется память из "ВРЕМЕННОГО" хранилища в Google Chrome. Временное хранилище в Chrome имеет квоту по умолчанию, равную 50% доступного дискового пространства, 20% из которых доступно для автономного приложения. Запрос большего количества квоты для временного хранилища ничего не делает.
Исходя из вышеизложенного, ответы на ваши вопросы будут:
- IndexedDB (в браузере Chrome) может использовать хранилище, не запрашивая его. (зная, что он выделен из временного хранилища)
- Запрос больше, чем ВРЕМЕННЫЙ предел хранения (20% из 50% доступных, описанных выше) ничего не выделит.
Вы можете использовать инструмент Browser Storage Abuser (процитированный в этой статье HTML5Rocks, в которой документированы результаты для разных браузеров), чтобы определить доступное временное хранилище на Chrome, который вы используете.
У меня недостаточно репутации SO, чтобы публиковать больше ссылок, но в приведенной выше статье HTML5Rocks, посвященной исследованию квот, достаточно подробностей, чтобы помочь вам определить соответствующий тип хранилища (ВРЕМЕННЫЙ или УСТОЙЧИВЫЙ) и соответствующий механизм хранения (если вы не обязательно обнуляете IndexedDB), который может подойти для вашего приложения.
Минимальное или мягкое ограничение составляет 5 МБ - браузер запросит разрешение на сохранение данных. Максимальный объем памяти - это предел вашего жесткого диска, поскольку все данные хранятся локально на диске вашего компьютера. В основном, если у вас есть 20 ГБ свободного места, вы можете использовать все хранилище для IndexedDB.