Как использовать LocalStorage в JavaScript для сохранения и извлечения данных

LocalStorage позволяет разработчикам постоянно хранить данные в формате ключ-значение в браузере пользователя. Это полезно для хранения пользовательских настроек, кэширования ответов API и сохранения состояния приложения между сессиями.
Ключевые моменты
- LocalStorage — это простая система хранения ключ-значение, которая сохраняет данные при перезагрузке страницы и перезапуске браузера.
- Не следует использовать для хранения конфиденциальных данных из-за проблем безопасности.
- Полезно для хранения пользовательских настроек и легкого кэширования ответов API.
- Альтернативные варианты включают SessionStorage (временное хранение) и IndexedDB (для сложного или масштабного хранения данных).
Понимание LocalStorage
LocalStorage является частью Web Storage API и предоставляет методы для хранения, извлечения и удаления данных:
localStorage.setItem('theme', 'dark'); // Store data
const theme = localStorage.getItem('theme'); // Retrieve data
localStorage.removeItem('theme'); // Remove a specific item
localStorage.clear(); // Clear all stored data
LocalStorage сохраняет данные до тех пор, пока они не будут явно удалены. Данные хранятся в виде строк, поэтому для объектов или массивов используйте JSON.stringify()
и JSON.parse()
:
const settings = { theme: 'dark', fontSize: 16 };
localStorage.setItem('settings', JSON.stringify(settings));
const savedSettings = JSON.parse(localStorage.getItem('settings'));
console.log(savedSettings.theme); // ""dark""
Пример использования 1: Хранение пользовательских настроек
LocalStorage часто используется для хранения настроек интерфейса, таких как предпочтения темы.
// Saving theme preference
localStorage.setItem('theme', 'dark');
// Applying stored preference on page load
const savedTheme = localStorage.getItem('theme');
if (savedTheme) applyTheme(savedTheme);
Пример использования 2: Кэширование ответов API
Кэширование ответов API уменьшает количество ненужных сетевых запросов и улучшает производительность.
const cacheKey = 'apiData';
const maxAge = 60 * 60 * 1000; // 1 hour
const cached = localStorage.getItem(cacheKey);
if (cached) {
const { data, timestamp } = JSON.parse(cached);
if (Date.now() - timestamp < maxAge) {
renderData(data);
} else {
localStorage.removeItem(cacheKey);
}
}
if (!localStorage.getItem(cacheKey)) {
fetch('/api/data')
.then(response => response.json())
.then(data => {
renderData(data);
localStorage.setItem(cacheKey, JSON.stringify({ data, timestamp: Date.now() }));
});
}
LocalStorage в сравнении с другими вариантами веб-хранилищ
- SessionStorage: Тот же API, что и LocalStorage, но данные удаляются при закрытии вкладки.
- IndexedDB: Поддерживает масштабное хранение данных со структурированными запросами, но более сложен в использовании.
- Cookies: Используются для хранения на стороне сервера, автоматически отправляются с HTTP-запросами.
Ограничения и лучшие практики
- Риски безопасности: Данные доступны через JavaScript; не храните конфиденциальную информацию.
- Ограничения хранилища: Около 5 МБ на источник; превышение вызывает ошибку
QuotaExceededError
. - Синхронный доступ: Большие операции чтения/записи могут блокировать основной поток.
- Нет автоматического истечения срока действия: При необходимости реализуйте логику истечения срока действия вручную.
- Используйте пространства имен: Добавляйте префиксы к ключам, чтобы избежать конфликтов (
MyApp_theme
вместоtheme
).
Заключение
LocalStorage — мощный, но простой инструмент для сохранения небольших объемов данных на стороне клиента. Он лучше всего подходит для хранения пользовательских настроек и кэширования легких ответов API. Однако разработчики должны учитывать его ограничения безопасности и обеспечивать правильную обработку данных, чтобы избежать проблем с производительностью.
Часто задаваемые вопросы
Нет, данные LocalStorage сохраняются бессрочно, если не удалены вручную.
Обычно около 5 МБ на источник, в зависимости от браузера.
Нет, LocalStorage доступен через JavaScript и не должен использоваться для конфиденциальных данных.
LocalStorage сохраняет данные между сессиями, а SessionStorage удаляет данные при закрытии вкладки.
Используйте LocalStorage для небольших пар ключ-значение; IndexedDB лучше подходит для сложного или масштабного хранения.