Метод setItem в библиотеке localForage представляет
собой основной механизм записи данных в асинхронное хранилище браузера.
Он абстрагирует различия между IndexedDB,
WebSQL и localStorage, предоставляя единый
интерфейс для сохранения значений по ключу.
В отличие от синхронного localStorage.setItem, операция
выполняется асинхронно и возвращает Promise, что позволяет
не блокировать основной поток выполнения JavaScript.
localforage.setItem(key, value)
Параметры:
key — строковый идентификатор записиvalue — сохраняемое значение любого поддерживаемого
типаВозвращаемое значение:
Promise → разрешается сохранённым значениемОперация записи не выполняется мгновенно. Внутренне библиотека выбирает доступный драйвер и делегирует сохранение соответствующему API браузера.
Основные этапы выполнения:
IndexedDB,
WebSQL, localStorage)PromiseАсинхронность позволяет избегать блокировки UI, что особенно критично при работе с большими объектами.
Метод setItem способен сохранять широкий спектр
структур:
DateBlob, ArrayBuffer)Пример:
localforage.setItem('user', {
id: 42,
name: 'Alex',
preferences: {
theme: 'dark',
language: 'ru'
}
});
При использовании драйвера IndexedDB применяется
structured clone алгоритм, что позволяет сохранять сложные объекты без
ручной сериализации.
При вызове setItem с уже существующим ключом выполняется
полное перезаписывание значения.
await localforage.setItem('session', { token: 'abc' });
await localforage.setItem('session', { token: 'def' });
После выполнения второй операции в хранилище останется только последнее значение.
setItem возвращает Promise, который
резолвится тем же значением, которое было передано на вход.
localforage.setItem('counter', 10)
.then((value) => {
console.log(value); // 10
});
Это поведение позволяет строить цепочки операций без дополнительного чтения из хранилища.
Поведение setItem зависит от выбранного драйвера:
При использовании драйвера, не поддерживающего structured clone, выполняется сериализация в JSON.
Ограничения такого подхода:
Date и MapПример:
localforage.setItem('config', {
mode: 'test',
flags: [true, false, true]
});
setItem может завершиться отклонением
Promise в следующих случаях:
Пример обработки:
localforage.setItem('largeData', bigObject)
.catch((err) => {
console.error('Ошибка сохранения:', err);
});
Скорость выполнения зависит от:
Наиболее быстрым вариантом считается IndexedDB, особенно при работе с большими наборами данных. localStorage демонстрирует худшую производительность из-за синхронной природы и строковой сериализации.
При сохранении больших объектов возможны дополнительные задержки, связанные с копированием структур данных.
Особенно значимыми становятся:
const buffer = new ArrayBuffer(1024 * 1024);
localforage.setItem('binary', buffer);
При одновременных вызовах setItem для одного ключа
финальным значением становится результат последней завершившейся
операции.
localforage.setItem('key', 1);
localforage.setItem('key', 2);
localforage.setItem('key', 3);
Порядок завершения может отличаться от порядка вызова, поскольку операции асинхронны.
Ключи интерпретируются как уникальные идентификаторы записей. Повторное использование ключа приводит к перезаписи.
Рекомендуется учитывать:
При вызове setItem библиотека выполняет следующие
действия:
Эта цепочка скрыта от разработчика и управляется внутренним API библиотеки.
В браузерных окружениях операция работает через Web APIs. В гибридных средах (например, Electron) поведение зависит от реализации IndexedDB в Chromium.
В старых браузерах fallback-механизм может переключаться на localStorage, что снижает функциональность.
Метод setItem в localForage характеризуется следующими
свойствами: