Постоянное хранение данных может помочь защитить важные данные от удаления и снизить вероятность их потери.
При нехватке места на диске, например, при низком объеме памяти, браузеры обычно удаляют данные , в том числе из Cache API и IndexedDB, из наименее часто используемых источников. Это может привести к потере данных, если приложение не синхронизировало данные с сервером, и снизить надежность приложения, удалив ресурсы, необходимые для его работы, что в конечном итоге негативно сказывается на пользовательском опыте.
К счастью, исследования команды Chrome показывают, что данные очень редко удаляются Chrome автоматически. Гораздо чаще пользователи очищают хранилище вручную. Таким образом, если пользователь регулярно посещает ваш сайт, вероятность удаления ваших данных невелика. Чтобы предотвратить удаление ваших данных браузером, вы можете запросить пометку всего хранилища вашего сайта как постоянного.
Постоянное хранилище поддерживается многими современными браузерами.
Чтобы узнать больше о выселении, объеме доступного хранилища и ограничениях по квоте, см. раздел «Хранение данных в интернете» .
Проверьте, помечено ли хранилище вашего сайта как постоянное.
Вы можете использовать JavaScript, чтобы определить, помечено ли хранилище вашего сайта как постоянное. Вызов метода navigator.storage.persisted() возвращает Promise, который разрешается логическим значением, указывающим, помечено ли хранилище как постоянное.
// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
const isPersisted = await navigator.storage.persisted();
console.log(`Persisted storage granted: ${isPersisted}`);
}
Когда следует запрашивать постоянное хранилище данных?
Лучшее время для запроса постоянного сохранения данных в хранилище — это сохранение важных пользовательских данных, и в идеале этот запрос должен быть оформлен в виде действия пользователя. Не запрашивайте постоянное сохранение данных при загрузке страницы или в другом коде Bootstrap, так как браузер может запросить у пользователя разрешение. Если пользователь не делает ничего, что, по его мнению, требует сохранения, запрос может быть непонятным, и он, скорее всего, отклонит его. Кроме того, не запрашивайте разрешение слишком часто. Если пользователь решил не предоставлять разрешение, не запрашивайте его снова сразу же при следующем сохранении.
Запрос на постоянное хранилище
Чтобы запросить постоянное хранилище для данных вашего сайта, вызовите navigator.storage.persist() . Он возвращает `Promise`, который разрешается логическим значением, указывающим, было ли предоставлено разрешение на постоянное хранилище.
// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
const isPersisted = await navigator.storage.persist();
console.log(`Persisted storage granted: ${isPersisted}`);
}
Как предоставляется разрешение?
Постоянное хранение рассматривается как разрешение . Браузеры используют различные факторы для принятия решения о предоставлении разрешений на постоянное хранение.
Chrome и другие браузеры на основе Chromium
Chrome и большинство других браузеров на основе Chromium автоматически обрабатывают запрос на разрешение и не показывают пользователю никаких запросов. Вместо этого, если сайт считается важным, разрешение на постоянное хранение данных предоставляется автоматически, в противном случае оно молча отклоняется.
К эвристическим методам определения важности сайта относятся:
- Насколько высок уровень вовлеченности пользователей на сайте?
- Сайт установлен или добавлен в закладки?
- Предоставлено ли сайту разрешение на отображение уведомлений?
Если запрос был отклонен, его можно подать повторно позже, и он будет рассмотрен с использованием тех же эвристических методов.
Firefox
Firefox делегирует запрос на разрешение пользователю. При запросе постоянного хранилища появляется всплывающее окно с вопросом, разрешит ли пользователь сайту сохранять данные в постоянном хранилище.

Какие данные для хранения защищаются постоянным хранилищем?
Если разрешение на постоянное хранение данных предоставлено, браузер не будет удалять данные, хранящиеся в:
- API кэширования
- Печенье
- DOM-хранилище (локальное хранилище)
- API файловой системы (предоставляемая браузером и изолированная файловая система)
- Индексированная база данных
- Работники сферы услуг
- Кэш приложения (устарел, не используйте)
- WebSQL (устарело, не используйте)
Как отключить постоянное хранилище
В настоящее время нет программного способа сообщить браузеру, что вам больше не требуется постоянное хранилище.
Заключение
Исследование команды Chrome показывает, что, хотя это и возможно, сохраненные данные редко удаляются Chrome автоматически. Для защиты важных данных, которые могут не храниться в облаке или могут привести к значительной потере данных, постоянное хранилище может быть полезным инструментом, гарантирующим, что ваши данные не будут удалены браузером, когда локальное устройство столкнется с нехваткой места. И помните, запрашивайте постоянное хранилище только тогда, когда пользователь, скорее всего, в нем нуждается.
Спасибо
Особая благодарность Виктору Костану и Джо Медли за рецензирование этого документа. Спасибо Крису Уилсону, написавшему оригинальную версию этого документа, которая впервые появилась на WebFundamentals.