12k
All articles

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

Сохранение и извлечение данных браузера через Web Storage API LocalStorage: методы JSON, стратегии кэширования, риски безопасности и лучшие практики хранения.

OpenReplay Team
OpenReplay Team
Как использовать 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?

Нет, данные LocalStorage сохраняются бессрочно, если не удалены вручную.

Сколько данных я могу хранить в LocalStorage?

Обычно около 5 МБ на источник, в зависимости от браузера.

Безопасно ли использовать LocalStorage для хранения конфиденциальных данных?

Нет, LocalStorage доступен через JavaScript и не должен использоваться для конфиденциальных данных.

Чем LocalStorage отличается от SessionStorage?

LocalStorage сохраняет данные между сессиями, а SessionStorage удаляет данные при закрытии вкладки.

Следует ли использовать LocalStorage или IndexedDB?

Используйте LocalStorage для небольших пар ключ-значение; IndexedDB лучше подходит для сложного или масштабного хранения.

Listen to your bugs 🧘, with OpenReplay

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

We use cookies to improve your experience. By using our site, you accept cookies.