localStorage – это технология хранения информации на стороне клиента. localStorage постепенно вытесняет другую технологию хранения данных – cookies, с которыми не очень удобно работать. По формату localStorage – практически хэш-таблица (таблица с парами «ключ:значение»), только со своими методами. Ниже – о том, зачем и как им пользоваться.
Для начала – вкратце расскажем, почему localStorage вообще появился и почему вам следует им пользоваться. Иногда нам нужно хранить какую-то информацию на стороне клиента – выбранные им язык и тема оформления, настройки личного кабинета и так далее. Сейчас для этого используются 3 основные технологии: cookies (самая первая из появившихся), localStorage и Indexed DB. Indexed DB – самая продвинутая и сложная, она позволяет хранить все данные в специальной базе данных, и для многих проектов такая технология избыточна – остаются cookies и localStorage.
Cookies – это специальная строка в заголовке HTTP-запроса, в DOM-модели она хранится в «document.cookie». Из плюсов куки – они есть везде, где есть передача данных по HTTP, то есть вам вообще не нужно задаваться вопросами совместимости: куки как технология будут поддерживаться, какой бы проект вы не разрабатывали. Но, как и у любой первой в области технологии, у cookies со временем обнаружился ряд проблем:
Кроме того, есть и вполне практичная проблема: с cookies банально неудобно работать. Куки представляют собой сплошную строку, для которой нужен специальный парсер – нужно либо подключать готовый, либо писать свой. И если будете писать свой – ни в коем случае не допускайте ошибки, cookies очень легко случайно перезаписать, удалив все данные.
В целом все эти минусы cookies легко объяснить: изначально технология не была предназначена для хранения данных на стороне пользователя, просто у разработчиков не было вообще никакого адекватного инструмента для этой задачи, и cookies оказались достаточно подходящими. Но – эти времена в прошлом, потому что сейчас браузеры предоставляют localStorage – объект браузера (window), который позволяет хранить на клиентской стороне до 5 Мб (иногда – больше) данных, полностью контролируется на стороне клиента и никуда не передается без вашего ведома.
localStorage – объект браузера. Для объектов хранилища в любом браузере прописан шорткат: вам не нужно писать «window.localStorage.getItem()», можете сразу обращаться по пути «localStorage.getItem()». С объектом хранилища можно работать как через встроенные методы, так и напрямую через свойства объекта; второй вариант существует только для обратной совместимости, работать с localStorage через свойства объекта крайне не рекомендуется – пользуйтесь встроенными методами.
По структуре локальное хранилище представляет собой массив, мимикрирующий под хэш-таблицу (словарь/карту), то есть все данные хранятся в парах «ключ:значение». Технология предоставляет ряд методов, с помощью которых этими данными можно манипулировать:
Получить данные о количестве элементов в хранилище можно через поле .length, полностью дропнуть (удалить) все хранилище можно с помощью метода .clear(). Поскольку в localStorage не встроена итерируемость, перебирать его нужно через обычный for – есть несколько вариантов, но обычно используется этот:
let keys = Object.keys(localStorage);
for(let key of keys) {
alert(`${key}: ${localStorage.getItem(key)}`);
}
У localStorage есть альтернатива в виде sessionStorage. Методы работы у объекта – те же, что и у локального хранилища. Из отличий:
Идея была хорошей – хранить информацию о текущей сессии. Увы, что-то пошло не так: sessionStorage так и не стал популярным инструментом, потому что его ограничения сильно сужают область применения.
Тезисно: