Постоянное хранилище может помочь защитить важные данные от вытеснения и снизить вероятность потери данных.
Столкнувшись с нехваткой места на диске, например, с нехваткой места на диске, браузеры обычно удаляют данные , в том числе из Cache API и IndexedDB, из источника, который использовался реже всего. Это может привести к потере данных, если приложение не синхронизировало данные с сервером, а также снизить надежность приложения из-за удаления ресурсов, необходимых для работы приложения. И то, и другое приводит к негативному пользовательскому опыту.
К счастью, исследования команды Chrome показывают, что Chrome очень редко удаляет данные автоматически. Гораздо чаще пользователи очищают хранилище вручную. Таким образом, если пользователь регулярно посещает ваш сайт, вероятность того, что ваши данные будут удалены, невелика. Чтобы браузер не удалил ваши данные, вы можете запросить пометку всего хранилища вашего сайта как постоянного.
Постоянное хранилище поддерживается во многих современных браузерах.
Чтобы узнать больше о вытеснении, объеме хранения и способах борьбы с ограничениями квот, см. раздел Хранилище в Интернете .
Проверьте, помечено ли хранилище вашего сайта как постоянное
Вы можете использовать JavaScript, чтобы определить, помечено ли хранилище вашего сайта как постоянное. Вызов navigator.storage.persisted()
возвращает обещание, которое разрешается логическим значением, указывающим, было ли хранилище помечено как сохраняемое.
// 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}`);
}
Когда мне следует запросить постоянное хранилище?
Лучшее время для запроса пометки вашего хранилища как постоянного — это когда вы сохраняете важные пользовательские данные, и в идеале запрос должен быть заключен в жест пользователя. Не запрашивайте постоянное хранилище при загрузке страницы или в другом коде начальной загрузки, браузер может запросить у пользователя разрешение. Если пользователь не делает ничего, что, по его мнению, необходимо сохранить, запрос может сбить с толку, и он, скорее всего, отклонит запрос. Кроме того, не делайте подсказок слишком часто. Если пользователь решил не предоставлять разрешение, не запрашивайте его сразу же при следующем сохранении.
Запросить постоянное хранилище
Чтобы запросить постоянное хранилище данных вашего сайта, вызовите navigator.storage.persist()
. Он возвращает обещание, которое разрешается с помощью логического значения, указывающего, было ли предоставлено разрешение на постоянное хранилище.
// 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 автоматически обрабатывают запрос на разрешение и не отображают никаких подсказок пользователю. Вместо этого, если сайт считается важным, разрешение на постоянное хранилище предоставляется автоматически, в противном случае в нем автоматически отказано.
Эвристика для определения важности сайта включает в себя:
- Насколько высок уровень вовлеченности сайта?
- Сайт установлен или добавлен в закладки?
- Разрешено ли сайту показывать уведомления?
Если запрос был отклонен, его можно запросить снова позже, и он будет оценен с использованием той же эвристики.
Fire Fox
Firefox делегирует запрос разрешения пользователю. Когда запрашивается постоянное хранилище, пользователю предлагается всплывающее окно пользовательского интерфейса с вопросом, разрешат ли они сайту хранить данные в постоянном хранилище.
![Всплывающее окно, отображаемое Firefox, когда сайт запрашивает постоянное хранилище.](https://web.developers.google.cn/static/articles/persistent-storage/image/a-popup-shown-firefox-a-c1a6b170da587.jpg?authuser=9&hl=ru)
Какое хранилище защищено постоянным хранилищем?
Если предоставлено разрешение на постоянное хранение, браузер не будет удалять данные, хранящиеся в:
- API кэша
- Печенье
- Хранилище DOM (локальное хранилище)
- API файловой системы (предоставляемая браузером и изолированная файловая система)
- ИндекседБД
- Работники сферы обслуживания
- Кэш приложения (устарело, не следует использовать)
- WebSQL (устарело, не следует использовать)
Как отключить постоянное хранилище
В настоящее время не существует программного способа сообщить браузеру, что постоянное хранилище вам больше не требуется.
Заключение
Исследования команды Chrome показывают, что сохраненные данные редко удаляются автоматически Chrome, хотя это и возможно. Для защиты критически важных данных, которые не могут быть сохранены в облаке или которые могут привести к значительной потере данных, постоянное хранилище может стать полезным инструментом, гарантирующим, что ваши данные не будут удалены браузером, когда локальное устройство столкнется с нехваткой места для хранения данных. И помните, запрашивайте постоянное хранилище только тогда, когда пользователю это, скорее всего, понадобится.
Спасибо
Особая благодарность Виктору Костану и Джо Медли за рецензирование этой статьи. Спасибо Крису Уилсону, написавшему оригинальную версию этой статьи, которая впервые появилась на WebFundamentals.
Героическое изображение Умберто на Unsplash