← Назад к вопросам

Какие знаешь способы хранения данных в браузере через JavaScript?

1.3 Junior🔥 201 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Способы хранения данных в браузере через JavaScript

В современном фронтенд-разработке существует несколько ключевых способов хранения данных на стороне клиента. Каждый из них имеет свои особенности, ограничения и оптимальные сценарии использования.

1. Web Storage API (LocalStorage и SessionStorage)

Это наиболее распространённый API для хранения пар ключ-значение.

LocalStorage:

// Сохранение данных
localStorage.setItem('username', 'JohnDoe');

// Получение данных
const user = localStorage.getItem('username');

// Удаление конкретного элемента
localStorage.removeItem('username');

// Очистка всего хранилища
localStorage.clear();

// Данные сохраняются без срока годности

SessionStorage:

// Работает аналогично LocalStorage
sessionStorage.setItem('sessionToken', 'abc123');

// Данные удаляются при закрытии вкладки браузера

Характеристики:

  • Объём: обычно 5-10 МБ в зависимости от браузера
  • Формат данных: только строки (для объектов используйте JSON.stringify/parse)
  • Синхронный API (может блокировать основной поток при больших объёмах)
  • Доступен только в контексте одного источника (same-origin policy)

2. IndexedDB

Мощная NoSQL база данных для хранения больших объёмов структурированных данных.

// Открытие базы данных
const request = indexedDB.open('MyDatabase', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  const store = db.createObjectStore('users', { keyPath: 'id' });
  store.createIndex('email', 'email', { unique: true });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  const transaction = db.transaction('users', 'readwrite');
  const store = transaction.objectStore('users');
  
  // Добавление данных
  store.add({ id: 1, name: 'John', email: 'john@example.com' });
  
  // Получение данных
  const getRequest = store.get(1);
  getRequest.onsuccess = () => {
    console.log(getRequest.result);
  };
};

Преимущества:

  • Асинхронная работа (не блокирует основной поток)
  • Поддержка транзакций
  • Индексация для быстрого поиска
  • Большой объём хранения (обычно от 50 МБ до 80% свободного места на диске)
  • Хранение бинарных данных (Blob, File)

3. Cookies

Классический способ хранения небольших объёмов данных, которые автоматически отправляются на сервер с каждым HTTP-запросом.

// Установка cookie
document.cookie = "username=John; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/; secure; samesite=strict";

// Чтение всех cookies
const cookies = document.cookie;

// Более удобная работа через библиотеки или собственные утилиты
function setCookie(name, value, days) {
  const date = new Date();
  date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
  const expires = "expires=" + date.toUTCString();
  document.cookie = `${name}=${value};${expires};path=/`;
}

Особенности:

  • Ограничение размера: 4 КБ на cookie
  • Автоматическая отправка на сервер
  • Можно установить срок жизни, домен, путь
  • Важно для аутентификации и сессий

4. Cache API

Часть Service Workers API, предназначенная для хранения сетевых запросов и ответов.

// Открытие кэша
caches.open('my-cache-v1').then(cache => {
  // Добавление ресурсов в кэш
  cache.addAll([
    '/styles.css',
    '/script.js',
    '/image.png'
  ]);
  
  // Или кэширование конкретного запроса
  cache.put('/api/data', new Response(JSON.stringify({ data: 'test' })));
});

// Получение данных из кэша
caches.match('/api/data').then(response => {
  if (response) {
    return response.json();
  }
});

5. WebSQL (устаревший)

Важно: WebSQL больше не является стандартом и удаляется из браузеров. Используйте IndexedDB вместо него.

Сравнительная таблица методов хранения

МетодОбъёмФормат данныхДоступностьОсновное назначение
LocalStorage5-10 МБСтроки (ключ-значение)Все браузерыПростые настройки, токены
SessionStorage5-10 МБСтроки (ключ-значение)Все браузерыВременные данные сессии
IndexedDBДесятки МБ-ГБСтруктурированные объектыВсе современные браузерыОффлайн-приложения, большие данные
Cookies4 КБСтрокиВсе браузерыАутентификация, сессии, трекинг
Cache APIЗависит от браузераRequest/ResponseСовременные браузерыОффлайн-ресурсы, PWA

Рекомендации по выбору

  1. Для небольших настроек и токенов → LocalStorage/SessionStorage
  2. Для данных аутентификации → HttpOnly Cookies (безопаснее) или LocalStorage с защитой от XSS
  3. Для оффлайн-приложений и больших данных → IndexedDB
  4. Для кэширования ресурсов → Cache API
  5. Для совместимости с серверными сессиями → Cookies

Безопасность и ограничения

  • Same-Origin Policy: данные доступны только в рамках одного источника
  • Квоты хранения: браузеры могут удалять данные при нехватке места
  • Приватный режим: некоторые методы могут иметь ограничения в инкогнито-режиме
  • XSS-уязвимости: данные в LocalStorage доступны любому JS-коду на странице

Выбор подходящего способа хранения зависит от конкретных требований приложения: объёма данных, необходимости оффлайн-работы, требований к безопасности и производительности. Современные приложения часто комбинируют несколько подходов для оптимального решения задач хранения данных на клиенте.