Back

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

Как использовать 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 лучше подходит для сложного или масштабного хранения.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers