1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/fudiwei-skit-storage.js

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Скетч / Сторажэ (Skit / Storage)

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

  • Строгая типизация.
  • Пространства имён. Данные, хранящиеся в разных пространствах имён, изолированы друг от друга.
  • Установка значений TTL для автоматического истечения срока действия сохранённых ключей.
  • Синхронный и асинхронный API.
  • Поддержка TypeScript.

Поддерживает: LocalStorage, SessionStorage, Wechat Mini-Program, QQ Mini-Progam, Alipay Mini-Program, Baidu Smart-Program, ByteDance Micro-App и поддерживает пользовательские адаптеры для адаптации к другим средам.


Функции

— Поддерживает LocalStorage, SessionStorage, Wechat Mini-Program, QQ Mini-Progam, Alipay Mini-Program, Baidu Smart-Program, ByteDance Micro-App, а также поддерживает пользовательские адаптеры для адаптации к другим средам.

— Поддерживает пространства имён. Данные, хранящиеся в различных пространствах имён, изолированы друг от друга.

— Позволяет устанавливать значения TTL для автоматического истечения срока действия сохранённых ключей.

— Обеспечивает строгую типизацию (на основе JSON).

— Предлагает синхронный и асинхронный API.

— Поддерживает TypeScript.


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

Установка:

npm install @skit/storage

Импорт:

/* require */
const $$storage = require('@skit/storage');

/* import */
import $$storage from '@skit/storage';

Основы:

/* установить строковые данные под ключом */
$$storage.set('key', 'value');

/* установить числовые данные под ключом */
$$storage.set('key', 1);

/* установить объектные данные под ключом */
$$storage.set('key', { value: 'object' });

/* получить и проанализировать данные, сохранённые под ключом */
let val = $$storage.get('key'); // автоматически попытается десериализовать и записать тип при сохранении

/* получить значение по умолчанию, если ключ не существует */
let val = $$storage.get('key', 'default value');

/* проверить, существует ли ключ */
let flag = $$storage.has('key');

/* удалить ключ и его данные */
$$storage.remove('key');

/* очистить все ключи */
$$storage.clear();

Массовое использование:

/* пакетная установка */
$$storage.setAll({ key1: 'val1', key2: 'val2' });

/* пакетное получение */
let item = $$storage.getAll(['key1', 'key2']); // { key1: 'val1', key2: 'val2' }

/* массовое удаление */
$$storage.removeAll(['key1', 'key2']);

/* получение всех ключей */
$$storge.keys(); // ['key1', 'key2']

Срок действия:

/* установка значения и TTL одновременно */
$$storage.set('key', 'val', { ttl: 1000 });

/* установка значения с относительным сроком действия */
$$storage.set('key', 'val');
$$storage.ttl('key', 1000);

/* установка абсолютного срока действия */
$$storage.ttl('key', new Date('2020-12-31 23:59:59'));

/* сделать так, чтобы срок действия никогда не истекал */
$$storage.ttl('key', -1);

/* получить TTL */
$$storage.ttl('key'); // `null` означает, что срок действия не истёк

Пространства имён:

/* создать два пространства имён */
let storage1 = $$storage.create({ namespace: 'ns1' });
let storage2 = $$storage.create({ namespace: 'ns1' });

/* разрешить ключи с одинаковыми именами в разных пространствах имён */
storage1.set('key', 'val1');
storage2.set('key', 'val2');
storage1.get('key'); // val1
storage2.get('key'); // val2

/* очистить ключи в пространстве имён */
storage1.clear();

/* очистить все ключи */
$$storage.clear();

Асинхронное использование:

/* асинхронная установка */
$$storage.setAsync('key', 'val');

/* асинхронное получение */
$$storage.getAsync('key').then((val) => {});

/* асинхронное удаление */
$$storage.removeAsync('key');

Часто задаваемые вопросы

1. Как использовать LocalStorage / SessionStorage?

Используйте LocalStorage по умолчанию. Если вы хотите переключиться на SessionStorage, пожалуйста:

import $$storage, { SessionStorageAdapter } from '@skit/storage';

const storage = $$storage.create({ adapter: SessionStorageAdapter });
storage.set('key', 'val');
storage.get('key');

2. Как использовать в Mini-Program?

Как указано выше:

import $$storage, { MiniprogramAdapter } from '@skit/storage';

const storage = $$storage.create({ adapter: MiniprogramAdapter });
storage.set('key', 'val');
storage.get('key');

3. Как написать собственный адаптер?

Вы можете... 4. Как реализуется стратегия истечения срока действия?

Поскольку базовый уровень не предоставляет способа установить TTL, он фактически записывает время истечения срока действия каждого ключа при записи и вычисляет текущее время при его извлечении, а также удаляет ключ, если срок его действия истёк.

Следует отметить, что описанное поведение является «LAZY», то есть просроченные ключи будут удаляться только при чтении.

Из-за того, что этот метод слишком затратный, по умолчанию он будет удалять данные только лениво в нескольких методах, таких как has(), get() и ttl(). Метод keys() по умолчанию не будет удалять данные лениво. Если вы хотите вернуть только те ключи, срок действия которых не истёк, вы можете:

/* Только вернуть ключи, которые не истекли */
$$storage.keys({ eliminated: true });

5. Что делать, если я хочу сохранить специальные типы, такие как Function?

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

6. Поддерживает ли это IE?

В каталоге dist можно выбрать несколько версий:

index.min.js: сборка с UMD. Поддерживается IE8+.

index.modern.min.js: сборка с UMD. Поддерживаются только современные браузеры.

index.cjs.min.js: сборка с CommonJS. Поддерживается Node.js 9.0+.

index.esm.min.js: сборка с модулями ES.

P.S. В принципе, это также может поддерживать IE6+. Но поскольку в IE6–7 отсутствует функция LocalStorage, вам необходимо написать собственный адаптер на основе IE UserData или полифиллов.

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

Вы можете оставить комментарий после Вход в систему

Введение

Более удобный доступ к локальному хранилищу, поддержка сильного типа чтения-записи, пространства имён, стратегии истечения срока действия и т. д., а также поддержка работы в браузере и мини-программе. Развернуть Свернуть
TypeScript и 3 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/fudiwei-skit-storage.js.git
git@api.gitlife.ru:oschina-mirror/fudiwei-skit-storage.js.git
oschina-mirror
fudiwei-skit-storage.js
fudiwei-skit-storage.js
main