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

Какой максимальный размер LocalStorage?

2.0 Middle🔥 181 комментариев
#Браузер и сетевые технологии

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

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

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

Максимальный размер LocalStorage в браузерах

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

Теоретические и практические ограничения

Согласно спецификации W3C, браузеры должны предоставить как минимум 5 МБ данных для каждого источника (origin). Однако это рекомендация, а не жесткое правило. На практике лимиты часто выше и варьируются.

Лимиты по браузерам (наиболее распространенные)

  • Chrome, Firefox, Edge (на базе Chromium): обычно предлагают 10 МБ на источник. В некоторых версиях или условиях может быть доступно до 5 МБ.
  • Safari (Desktop): жестко ограничивает 5 МБ на источник. Это ограничение строго соблюдается.
  • Safari (Mobile / iOS): также 5 МБ, но стоит отметить, что в мобильных браузерах общее доступное пространство может быть меньше из-за ограничений устройства.
  • Internet Explorer 8+: предлагает 10 МБ на домен.

Важно: «Источник» (origin) включает комбинацию протокола, домена и порта. Например, https://example.com и http://example.com считаются разными источниками и имеют отдельные хранилища.

Как браузер определяет и применяет лимит?

Браузер не выделяет заранее заданный объем дискового пространства. Лимит применяется динамически:

  1. При записи данных браузер вычисляет их размер (включая ключи и значения в строковом формате).
  2. Если попытка записи превышает доступный лимит, возникает исключение QuotaExceededError.
  3. Браузеры могут учитывать сжатие данных. Например, Chrome использует алгоритм сжатия Snappy, поэтому фактический объем дискового пространства может отличаться от объема записанных строк.

Проверка доступного пространства и обработка ошибок

Нет прямого API для проверки остатка свободного места. Рабочий подход — попытка записи и обработка возможной ошибки.

function testLocalStorageCapacity() {
    const key = 'testData';
    const megaByte = 1024 * 1024;
    let data = '';
    
    // Начинаем с 1 МБ и увеличиваем
    for (let i = 1; i <= 20; i++) {
        try {
            // Создаем строку размером ~ i МБ
            data = 'x'.repeat(megaByte * i);
            localStorage.setItem(key, data);
            console.log(`Успешно записано ~${i} МБ`);
            localStorage.removeItem(key); // очищаем для следующей попытки
        } catch (e) {
            if (e.name === 'QuotaExceededError') {
                console.log(`Лимит достигнут на ~${i} МБ`);
                localStorage.removeItem(key);
                return;
            }
        }
    }
}

// Вызываем функцию для теста
testLocalStorageCapacity();

Ключевые рекомендации по использованию

  • Не рассчитывайте на максимальный объем. Разрабатывайте приложения, учитывая минимальный лимит (5 МБ), чтобы обеспечить кросс-браузерную совместимость.
  • Лимит делится между LocalStorage и SessionStorage. Они являются частью одного хранилища на источник.
  • Данные хранятся только в строковом формате. Для сложных объектов используйте JSON.stringify(), что увеличивает итоговый размер.
  • Очищайте неиспользуемые данные. Регулярно удаляйте старые или ненужные ключи, чтобы избежать превышения лимита.
  • Рассмотрите альтернативы. Для больших объемов данных лучше использовать IndexedDB (поддерживает значительно большие объемы, часто сотни МБ или даже ГБ), Cache API или серверное хранилище.

Альтернативы для больших объемов данных

  • IndexedDB: Асинхронная, объектная база данных в браузере. Лимиты обычно намного выше (сотни МБ), но также зависят от браузера и устройства.
  • Cache API: Часть Service Worker API, предназначенная для хранения сетевых запросов и ответов. Используется преимущественно для кэширования ресурсов.
  • Server-side storage: Наиболее надежный метод — хранить данные на сервере (в базе данных или файловой системе) и использовать браузерное хранилище только для временных или небольших данных (например, токенов, настроек).

Итог

Максимальный размер LocalStorage — величина нефиксированная, но в кросс-браузерной разработке безопасно ориентироваться на 5 МБ. Превышение этого лимита приведет к исключению QuotaExceededError. Для надежных приложений, требующих хранения значительных данных клиента, используйте IndexedDB, оценивая его лимиты отдельно для каждого целевого браузера и устройства.

Какой максимальный размер LocalStorage? | PrepBro