Параметр size: размер для WebSQL

В драйвере WebSQL параметр size задаёт предполагаемый размер базы данных, который библиотека использует при создании хранилища через WebSQL API. Это значение не является динамическим лимитом и не увеличивает реальную квоту браузера, но служит подсказкой для инициализации базы и резервирования пространства.

WebSQL требует указания предполагаемого размера базы при её открытии:

openDatabase(name, version, displayName, estimatedSize, callback)

Параметр size в localForage напрямую транслируется в estimatedSize. Он выражается в байтах и используется браузером для оценки объёма дискового пространства, которое может понадобиться базе данных.

Ключевые особенности поведения:

  • значение задаётся один раз при инициализации хранилища;
  • влияет на поведение openDatabase, но не гарантирует выделение указанного объёма;
  • браузер может игнорировать или корректировать значение в зависимости от политики хранения;
  • слишком маленькое значение может привести к ошибкам записи при росте данных.

Единицы измерения и интерпретация

size всегда указывается в байтах:

  • 1 MB = 1 * 1024 * 1024 = 1048576 байт
  • 5 MB = 5242880 байт
  • 10 MB = 10485760 байт

Типичные значения, используемые в практике:

  • 4980736 (≈ 4.75 MB) — историческое значение по умолчанию в некоторых реализациях
  • 5242880 (5 MB) — базовый безопасный минимум
  • 10485760 (10 MB) — расширенное хранилище для более крупных данных

Поведение при отсутствии параметра

Если size не задан, localForage использует значение по умолчанию, которое зависит от версии библиотеки и драйвера. В WebSQL это может приводить к:

  • созданию базы с минимально допустимым размером;
  • запросу браузера на подтверждение увеличения квоты;
  • потенциальным ограничениям записи при накоплении данных.

Влияние на работу WebSQL

Хотя WebSQL считается устаревшим стандартом, его модель хранения всё ещё учитывает предварительную аллокацию. size влияет на:

  • инициализацию базы данных;
  • поведение браузера при первом создании хранилища;
  • внутренние механизмы квотирования в WebKit/Blink-движках.

Важно учитывать, что реальное пространство не резервируется полностью — браузер работает по модели «lazy allocation», выделяя место по мере необходимости.

Использование в localForage

Параметр передаётся через конфигурацию:

import localforage from "localforage";

localforage.config({
    name: "appStorage",
    storeName: "keyvaluepairs",
    version: 1,
    size: 10485760
});

После инициализации драйвера значение size становится частью параметров открытия WebSQL-базы.

Поведение при смене размера

Изменение size после создания базы не приводит к пересозданию хранилища. WebSQL:

  • не поддерживает динамическое изменение estimatedSize;
  • продолжает работать с уже созданной базой;
  • игнорирует новое значение при повторной конфигурации.

Чтобы применить новый size, требуется:

  • смена версии базы (version);
  • либо удаление хранилища и повторная инициализация.

Ограничения браузеров

Разные движки по-разному трактуют size:

  • WebKit (Safari) может запрашивать подтверждение при превышении порога;
  • Chromium игнорирует значение при наличии достаточной глобальной квоты;
  • мобильные браузеры часто ограничивают общий объём WebSQL независимо от size.

Таким образом, size следует рассматривать как ориентир, а не как гарантию.

Практические рекомендации по выбору значения

Выбор size зависит от предполагаемого сценария хранения:

  • небольшие ключ-значение данные (настройки, состояние UI) — 1–5 MB;
  • средние объёмы (кеш API, пользовательские данные) — 5–10 MB;
  • тяжёлые сценарии (локальные копии данных, офлайн-контент) — от 10 MB и выше.

Избыточно большое значение не ускоряет работу и не увеличивает доступную квоту, но может повлиять на поведение браузера при первом открытии базы.

Связь с другими драйверами localForage

Параметр size применяется только в WebSQL. В других драйверах:

  • IndexedDB игнорирует size полностью;
  • localStorage не использует квоты через конфигурацию библиотеки.

При переключении драйвера через setDriver значение остаётся в конфигурации, но не имеет эффекта:

localforage.setDriver(localforage.INDEXEDDB);

Типичные ошибки при использовании

  • указание размера в мегабайтах без перевода в байты;
  • ожидание реального резервирования диска;
  • попытка динамически изменять size в рантайме;
  • использование слишком малого значения, приводящего к ошибкам записи при росте данных.

Внутреннее поведение localForage

При выборе WebSQL-драйвера библиотека:

  • проверяет наличие API openDatabase;
  • передаёт size как estimatedSize;
  • создаёт таблицу key-value хранилища внутри SQL-базы;
  • использует size только на этапе инициализации соединения.

Дальнейшие операции getItem/setItem не зависят от этого параметра и работают через стандартные SQL-запросы, абстрагированные внутри драйвера.