Метод определения количества записей в хранилище является одной из базовых операций при работе с асинхронными хранилищами браузера. В контексте localForage он реализует унифицированный интерфейс поверх IndexedDB, WebSQL и localStorage, скрывая различия между ними и предоставляя предсказуемое поведение.
Метод length имеет две основные формы вызова:
localForage.length(callback)
и промис-ориентированную форму:
localForage.length().then(numberOfKeys => { ... })
Также возможна асинхронная обработка через
async/await:
const count = await localForage.length();
length(
callback?: (err: any, numberOfKeys: number) => void
): void
length(): Promise<number>
Метод возвращает количество ключей, сохранённых в текущем экземпляре
localForage. Под ключами понимаются все элементы, записанные через
setItem, которые ещё не были удалены через
removeItem или очистку через clear.
Подсчёт выполняется асинхронно независимо от используемого драйвера:
COUNT(*) запросаПри использовании Promise возвращается число:
number
Оно отражает текущее количество элементов в хранилище.
При использовании callback значение передаётся вторым аргументом:
(err, numberOfKeys) => {}
где:
err — объект ошибки или nullnumberOfKeys — количество записанных элементовМетод не выполняется синхронно, даже если драйвер физически способен предоставить результат мгновенно (например, localStorage). Это сделано для унификации API и предотвращения различий в поведении между средами.
Каждый вызов length создаёт асинхронную операцию,
которая может быть отложена в очередь выполнения событийного цикла.
Поведение метода напрямую зависит от активного драйвера, но результат остаётся одинаковым по смыслу.
В IndexedDB подсчёт обычно выполняется через перебор курсора или использование встроенных возможностей подсчёта записей. В крупных базах данных операция может иметь стоимость O(n), если оптимизированный счётчик не используется.
При использовании WebSQL выполняется SQL-запрос вида:
SEL ECT COUNT(*) FR OM store;
Это наиболее предсказуемый вариант с точки зрения производительности.
В случае localStorage выполняется перебор ключей объекта
window.localStorage, с фильтрацией по префиксу,
соответствующему экземпляру localForage.
Если в хранилище отсутствуют записи, метод возвращает:
0
Ошибка в этом случае не генерируется, так как отсутствие данных считается валидным состоянием.
Ошибки могут возникать в следующих случаях:
При использовании Promise ошибка передаётся через
reject:
localForage.length().catch(err => {
// обработка ошибки
});
При использовании callback ошибка передаётся первым аргументом.
Операция length считается относительно лёгкой, но её
стоимость не является строго константной во всех драйверах.
При частых вызовах в горячих циклах возможны накладные расходы, особенно в localStorage-режиме.
Так как localForage использует асинхронную модель, возможна ситуация,
когда значение length отражает состояние хранилища на
момент завершения запроса, а не на момент его вызова.
Пример:
const p1 = localForage.setItem('a', 1);
const p2 = localForage.length();
Результат length может не учитывать
setItem, если операция записи ещё не завершена.
Метод тесно связан с:
setItem — увеличивает количество ключей при добавлении
новогоremoveItem — уменьшает количество ключей при
удаленииclear — обнуляет результат до нуляkeys — предоставляет список ключей, на основе которого
можно вычислить длину вручнуюВ сценариях, где localForage используется как кэш или слой хранения
состояния приложения, length часто применяется для:
Однако метод не предоставляет информации о размере данных в байтах, только о количестве записей.
Если во время работы приложения происходит переключение драйвера
через setDriver, метод length начинает
использовать новый механизм подсчёта без сохранения промежуточного
состояния. Это может привести к различиям в значении, если структуры
хранения отличаются между драйверами.
Хотя JavaScript в браузере однопоточный, асинхронные операции могут
приводить к конкурентным изменениям состояния. В момент выполнения
length данные могут быть изменены другими операциями записи
или удаления, что делает результат актуальным только на момент
завершения запроса.
Внутри localForage метод length является частью
адаптерного слоя. Каждый драйвер реализует собственную стратегию
подсчёта:
Над этим слоем находится единый интерфейс, который нормализует
результат в number и оборачивает его в Promise или
callback-стиль в зависимости от вызова.
Метод применяется в системах, где важно знать объём хранимых сущностей:
При этом он не предназначен для анализа содержимого или глубокой инспекции данных — только для количественной оценки состояния хранилища.