Хранение информации на клиенте
1. Введение
Основная проблема веб-приложений — при использовании приложения и закрытии, его состояние будет сброшено при следующем посещении. Если вы закрываете приложение на рабочем столе и снова открываете его, последнее состояние восстанавливается.
Вот почему, как разработчику, вам нужно где-то сохранить состояние своего интерфейса или данные, которые необходимо запомнить между посещениями страницы. На помощь приходит хранение информации о состоянии приложения на компьютере пользователя в браузере.
2. Cookies
Классический способ хранения информации на клиенте - это использовать куки-файл размещенный на компьютере пользователя. Куки - это текстовые строки списка пар ключ=значение, разделенные точкой с запятой. Обычно куки приходят от сервера и позволяют хранить простые строчные данные.
Но у куки есть несколько ограничений.
Они добавляются к каждому запросу на сервер, что может быть излишне
Куки позволяют хранить всего до 4кб данных, что довольно мало
Поскольку куки используются для отслеживания поведения людей в серфинге, пользователи часто отключают их, а сайты спрашивают каждый раз - нужно ли их устанавливать
Используя куки, довольно проблематично отслеживать две или более транзакций на одном и том же сайте, что может происходить одновременно в разных вкладках
2.1. Дополнительные материалы
3. Web Storage API
Web Storage API — включает в себя локальное хранилище (localStorage), хранилище сеансов (sessionStorage) и предоставляет способ хранения пар ключ:значение более интуитивно понятным способом, чем использование куки. Данные в веб-хранилище, в отличие от куки, сохраняются даже при закрытии браузера или выключении компьютера.
Веб-хранилище - это часть HTML5-спецификации. Существует два варианта хранения данных:
sessionStorage — используется для добавления данных в хранилище сеансов. Данные этого хранилища будут доступны для любой страницы с того же сайта, открытого в этом окне, т.е. сессии. Как только окно будет закрыто - сеанс будет завершен, а хранилище сеансов очищено.
localStorage — хранилище, которое охватывает несколько окон и сохраняется после текущего сеанса. В частности, веб-приложения могут сохранить пользовательские данные, такие как настройки профиля или содержимое корзины товаров на стороне клиента.
3.1. localStorage
localStorage (локальное хранилище) — позволяет хранить данные без истечения срока действия в формате пар ключ:значение на компьютере пользователя и читать их, когда пользователь снова вернется на страницу.
В localStorage не хранят методы объектов или функции, только данные.
Использование локального хранилища в современных браузерах очень просто и доступно через интерфейс window.localStorage.
3.2. Сохранение
Используя метод setItem можно записать пару ключ:значение.
Одним из неприятных недостатков локального хранилища является то, что вы можете хранить только строки. Это означает, что когда есть объект, он не будет сохранен правильно. Это можно обойти, используя метод JSON.stringify, преобразовав объект в строку.
3.3. Чтение
Чтение данных из локального хранилища — это тот же процесс, что и сохранение данных, но в обратном порядке.
Если вы знаете, что значение - это обычная строка, вы можете просто прочитать ее без необходимости парсить что-либо.
В противном случае, необходимо распарсить значение, чтобы вернуть исходный JavaScript-объект.
3.4. Удаление
Для того чтобы удалить пару, необходимо вызвать метод и передать ему ключ.
3.5. Очистка хранилища
Если вы хотите полностью очистить хранилище, вызовите метод clear.
3.6. Пример
Создадим поле для вывода и кнопку для сохранения введенного в localStorage. Изначально такой пары в хранилище нет, поэтому будет выведена пустая строка.
Попробуйте позаполнять input и нажмите Save. Текст в поле вывода изменится на тот, что ввели. Перезагрузите страницу, все тот же текст, хотя вы ничего еще не вводили. Мы берем его из localStorage последнее веденное значение.
Посмотреть содержимое localStorage можно в инструментах разработчика на вкладке Application.

4. Модуль для localStorage
Мы уже умеем работать с локальным хранилищем, можем записать, прочитать или удалить. Следующим шагом будет его правильное, осмысленное использование.
Напишем модуль для безопасной работы с localStorage, ведь при чтении или парсе данных для записи может произойти ошибка. Пишем две функции для записи и чтения, назовем их load и save.
В случае, если данные некорректны, JSON.parse() и JSON.stringify() генерируют ошибку, то есть скрипт «упадёт», поэтому при работе с JSON используем try..catch, чтобы обработать возможную ошибку и выводим error в консоль.
Теперь мы можем безопасно записывать и читать localStorage. Попробуйте сами дописать метод remove, аналогично load и save.
5. IndexedDB
IndexedDB — это хранилище больше, чем локальное и полезно для приложений, требующих хранения большого количества данных, например кеширование списка статей. Благодаря этому, приложения могут работать и загружаться быстрее.
Как и
localStorageсохраняет парыключ:значениеВ отличии от
localStorageпозволяет хранить сложные типы данныхЭто не реляционная база данных
Имеет, в основном, асинхронный API на промисах
Ниже приведен набор полезных статей. Не спешите углубляться в IndexedDB, данная технология упоминается для общего ознакомления, нет смысла использовать это хранилище для тривиальных задач, для этого хватит localStorage.
6. Дополнительные материалы
Last updated