Что происходит при переполнении localStorage в браузере?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Когда объём данных в localStorage достигает своего лимита, любой последующий вызов метода setItem приведёт к возникновению ошибки типа QuotaExceededError. Для обработки подобной ситуации следует произвести оборачивание вызова функции setItem в блок try-catch. В случае, если произойдёт ошибка, управление перейдёт в блок catch, где можно осуществить удаление ненужной информации или уведомить пользователя о возникновении проблемы.

JS
Скопировать код
try {
  localStorage.setItem('key', 'value'); // Попытка добавить данные
} catch (e) {
  if (e instanceof DOMException && e.code === 22) {
    // Объем хранилища исчерпан, пора предпринимать действия
    alert('В хранилище localStorage недостаточно места. Попробуйте освободить некоторое пространство.'); 
  }
}
Кинга Идем в IT: пошаговый план для смены профессии

Различия в браузерах

Объем хранилища localStorage, которым распоряжаются браузеры, может отличаться. На десктопных системах это часто ограничивается 5Мб на один домен, причём у пользователя может отсутствовать возможность менять данный лимит. Если говорить конкретнее, в Opera можно увеличить размер хранилища, в то время как в Chrome он фиксирован и не может быть изменён.

Ошибки и их обработка

Ситуация с переполнением хранилища требует включения обработки исключений для случаев, когда размер хранилища превышен. Метод getItem(key) позволит извлечь из хранилища данные, которые остались нетронутыми в процессе работы.

Моменты до нависшего кризиса

Задача разработчика заключается в предугадывании моментов переполнения localStorage и применении таких решений, как:

  • Предложение пользователю удалить часть данных — это вариант с соблюдением этикета.
  • Очистка старых или неважных данных — практичный подход.
  • Перемещение данных на сервер или использование IndexedDB — перспективное решение.

Визуализация

Воображаем иллюстрацию для localStorage, где его переполнение сравнивается с автобусом, куда больше не влезает людей:

Markdown
Скопировать код
Общественный транспорт: 🚍[нет свободных мест]👨‍👨‍👦‍👦🧑‍🤝‍🧑👩‍👩‍👦‍👦

Попытка добавить новый элемент (setItem):

JS
Скопировать код
localStorage.setItem('newData', 'value'); // 🧕

В результате происходит:

Markdown
Скопировать код
**ОШИБКА**: 🚨🚫 "QuotaExceededError"

Точно также, как в переполненный автобус не возьмут ещё пассажира, переполненное localStorage не примет новых данных.

Автоматического управления хранилищем не предусмотрено

В браузерах не предусмотрена функция автоматической очистки localStorage. Старые данные не будут автоматически удалены. Логика управления требует:

  • Реализации стратегии удаления данных по определенному расписанию.
  • Внедрение меток времени для идентификации и удаления устаревших данных.
  • Использование событий для отслеживания состояния хранилища.

Лучшие практики работы с хранилищем

Чтобы ваше веб-приложение работало надёжно, стоит придерживаться следующих наилучших практик:

  • Мониторить остаточное пространство — так же, как смотрим, какие суммы находятся в кошельке перед оформлением покупки.
  • Разрабатывать обработчики ошибок, аналогично наличию спасательного круга на корабле.
  • Информировать пользователей о особенностях браузеров — чтобы они полностью контролировали свои данные.
  • Проводить тестирование приложения для проверки вместимости хранилища, например, через Web Storage Support Test — чтобы убедиться в его надёжности.

Полезные материалы

  1. Window: localStorage property – Web APIs | MDN — детальная информация про механизмы работы и поведение localStorage.
  2. javascript – What is the max size of localStorage values? – Stack Overflow — обсуждение максимального размера localStorage.
  3. HTML Web Storage API — описание и руководство по использованию веб-хранилища HTML5.
  4. Local Storage – Dive Into HTML5 — глубокий анализ API local storage.
  5. "localStorage" | Can I use... Support tables for HTML5, CSS3, etc — таблицы поддержки localStorage в различных браузерах.
  6. saving data with localStorage – Mozilla Hacks – the Web developer blog — руководство по использованию localStorage на практике.
  7. A Complete Guide to LocalStorage – CSS-Tricks — полезные рекомендации для эффективного использования localStorage.