Что такое хранилище на стороне клиента?
Как следует из названия, хранилище на стороне клиента позволяет пользователю хранить данные на клиенте (т. Е. В браузере пользователя). И наоборот, серверное хранилище будет хранить данные на сервере (то есть во внешней базе данных).
Для получения дополнительной информации о разнице между клиентом и сервером ознакомьтесь с моей статьей Введение в внутреннее программирование.
Сегодня во многих современных браузерах страницы загружаются динамически. Это означает, что они используют хранилище на стороне сервера для извлечения данных и отображения их в браузере. Однако до сих пор есть случаи, когда хранилище на стороне клиента может быть полезно.
Когда это полезно?
Хранилище на стороне клиента может быть полезным в следующих случаях использования:
- Быстрый и независимый от сети доступ к данным
- Сохранение пользовательских настроек (т. е. пользовательских виджетов, размера шрифта, цвета и т. д.)
- Сохранение сеанса предыдущей активности (т. е. входа в учетную запись, корзины покупок и т. д.)
- Сохраняйте данные локально для использования в автономном режиме
Типы клиентских хранилищ
1. Файлы cookie (не рекомендуется)
Вы, наверное, слышали о файлах cookie. Они представляют собой наиболее классический тип хранилища на стороне клиента и используются сайтами с первых дней существования Интернета.
Файлы cookie отправляются с сервера клиенту, а затем сохраняются на клиенте. Сохраненный файл cookie затем может быть извлечен и отправлен обратно на сервер всякий раз, когда клиент снова делает запрос к серверу. Обычно файлы cookie используются для управления сеансами учетных записей, хранения информации о пользователях и отслеживания пользовательских данных.
Однако, поскольку файлы cookie являются самыми старыми формами хранения на стороне клиента, у них есть несколько проблем с безопасностью и ограничений хранения, которые делают их неподходящим вариантом для хранения данных на стороне клиента.
Подробнее о проблемах безопасности файлов cookie читайте здесь.
Пример CRUD
//Create
document.cookie = "name=victoria";
//Read
console.log( document.cookie );
//Update
document.cookie = "name=victoria lo";
//Delete - Just set an expiry date that has passed
document.cookie = "name=victoria lo ; expires = Thu, 01 Jan 2010 00:00:00 GMT"
2. API веб-хранилища
API веб-хранилища - это API, который хранит пары ключ-значение данных на клиенте. Этот простой и интуитивно понятный синтаксис позволяет легко хранить и извлекать строки или строковые данные JSON.
В этом API есть 2 типа веб-хранилищ: Локальное хранилище и хранилище сеансов.
Локальное хранилище против хранилища сеансов
Следует отметить некоторые отчетливые различия между двумя типами веб-хранилищ.
CRUD Пример локального хранилища
// Create
const user = { first: 'Victoria', last: 'AAA' }
//store as a stringified JSON
localStorage.setItem('user', JSON.stringify(user));
// Read
console.log(JSON.parse(localStorage.getItem('user')))
//output will be a JSON: {first: "Victoria", last: "lo"}
// Update
const update = { first: 'Victoria', last: 'Lo' }
localStorage.setItem('user', JSON.stringify(update));
// Delete
localStorage.removeItem('user');
CRUD Пример хранилища сеансов
Тот же синтаксис, что и в локальном хранилище, но замените localStorage
на sessionStorage
.
3. API IndexedDB
Полная система базы данных, подходящая для хранения более сложных данных, чем локальное хранилище на клиенте. В отличие от API веб-хранилища, он позволяет организовывать и хранить более структурированные данные, такие как записи клиентов, подробные списки дел и т. Д.
Он использует хранилища объектов, которые по сути представляют собой структуры, похожие на таблицы, для хранения пар "ключ-значение".
Пример CRUD
Сначала мы должны сделать запрос на открытие базы данных:
let openRequest = indexedDB.open('database', 1);
// users is the database name and 1 is the version
Затем мы можем добавить несколько методов ниже для выполнения операций:
openRequest.onupgradeneeded = function() { // triggers if the client had no database // ...perform initialization... };
openRequest.onerror = function() { console.error("Error", openRequest.error); };
openRequest.onsuccess = function() { let db = openRequest.result; // continue to work with database using db object };
(Код из javascript.info/indexeddb)
Теперь давайте создадим хранилище объектов внутри метода onupgradeneeded
:
let db = openRequest.result;
// if there's no "users" store initialized, we create one
if (!db.objectStoreNames.contains('users')) {
let objectStore = db.createObjectStore('users', { keyPath: 'id', autoIncrement:true });
}
Для добавления данных в хранилище объектов IndexedDB API использует транзакции. Мы можем начать транзакцию для добавления / помещения данных в наше хранилище объектов «пользователей» с помощью:
// open a read/write transaction let transaction = db.transaction("users", "readwrite");
// get the object store we want to operate on let userStore = transaction.objectStore("users");
// add the data into the store userStore.add({ first: 'Victoria', last: 'Lo' });
// finish the transaction transaction.oncomplete = function() { console.log("Transaction is complete"); };
Чтобы прочитать или удалить данные, просто выполните те же шаги транзакции, которые были показаны ранее, но на этот раз вместо добавления мы используем:
// Read userStore.get('Victoria');
// Delete userStore.delete('Victoria');
И в этом суть!
Спасибо, что прочитали это базовое введение в клиентское хранилище в JavaScript. Эти примеры служат только в качестве краткого обзора того, как работают эти различные типы хранилищ. Я рекомендую вам прочитать более подробную информацию по адресу:
Тем не менее, лучший способ учиться - это делать, поэтому я также рекомендую вам попробовать создать мини-проект, в котором используется хранилище на стороне клиента. Надеюсь, эта статья была полезной. Ваше здоровье!
Первоначально опубликовано на https://lo-victoria.com.
JavaScript на простом английском языке
Понравилась эта статья? Если да, то получите больше похожего контента, подписавшись на наш канал YouTube в Decoded!