Ответ вслух Junior Хранилища обновлено

Какие хранилища есть в браузере

Вопрос

Какие хранилища есть в браузере и как ты выбираешь, что использовать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Я выбираю по тому, кому нужны данные и сколько их. Если данные нужны серверу при каждом запросе, например сессия, это кука, желательно HttpOnly, Secure и с SameSite.

Что должно прозвучать в ответе

  • Cookie: маленькие, уходят на сервер, для сессии и серверных настроек

  • `localStorage`: строки, ~5 МБ, бессрочно, синхронно, для мелких настроек вроде темы

  • `sessionStorage`: то же, но на вкладку, для временного состояния

  • IndexedDB: большие структурированные данные и файлы, асинхронно, офлайн

  • Cache API: ответы на запросы, для офлайна через Service Worker

  • Все клиентские хранилища разделены по origin и могут быть очищены браузером

Что могут спросить следом

  • Почему localStorage плохо подходит для больших данных?
  • Что будет с данными при нехватке места на диске?
  • Чем Cache API отличается от HTTP-кеша?

Разбор

Я выбираю по тому, кому нужны данные и сколько их. Если данные нужны серверу при каждом запросе, например сессия, это кука, желательно HttpOnly, Secure и с SameSite. Если это небольшая настройка интерфейса, тема или свёрнутая панель, подойдёт localStorage: простой API, переживает перезапуск, общий для вкладок. Но он синхронный и только для строк, поэтому большие объёмы туда не кладу. Для состояния, которое должно жить только в этой вкладке, например черновик шага формы, есть sessionStorage. Когда данных много, они структурированные или бинарные, например офлайн-заметки с картинками, это IndexedDB: асинхронная, с индексами и транзакциями, доступна из воркеров. А чтобы приложение открывалось без сети, Service Worker кладёт ответы в Cache API. Все эти хранилища изолированы по origin, и браузер вправе их очистить, поэтому важные данные должны жить на сервере, а navigator.storage.persist() может попросить не удалять их автоматически.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме