UBCache

UBCache

Client side cache. Wrapper around indexedDB

Contain functions for simple key/value manipulations and advanced (entity related) manipulations.

Create separate database for each connection inside application.

For every database will create three store

  • permanent for data persistent between sessions and
  • session for data, live inside user session only (from login to login)
  • user for custom data

Usage sample

    var c = new UBCache('mydb');
    c.put([
        {key: 'note1', value: {prop1: 1, prop2: 'do something'} },
        {key: 'note2', value: 'do something else'}
    ]).done();
    c.get('note1').done(UB.logDebug); //output result to console
    c.clear().done();
    c.get('note1').done(function(value){
        console.log(value === undefined ? 'all cleared': 'hm... something wrong')
    });

Constructor

new UBCache(dbName, versionopt)

Arguments:
  1. dbName (String)  Name of indexedDB database we create. Usually this is UBConnection#baseURL. Constructor lower case dbName during creation
  2. [version] (Number)  Optionally database version.
Author:
  • pavel.mash on 17.04.2014.

Members

SESSION: String static readonly

SESSION store name

PERMANENT: String static readonly

PERMANENT store name

cacheTypes static readonly

Possible cache types for businnes logic data
Properties:
Name Type Description
None String Кэширование не осуществляется. Запрос на сервер отправляется всегда.
Entity String Кэширование осуществляется на уровне сущности. Запрос на сервер отправляется всегда. При этом в запрос добавляется версия закэшированных данных, если таковые имеются. Результат запроса содержит или данные и версию данных, которые помещаются в кэш; или флаг notModified. В этом случае данные считываются из кэша.

Если в запросе в whereList присутствует ID - кэширование не осуществляется. Запрос на сервер отправляется всегда.

Session String Кэширование осуществляется на уровне сессии. Запрос на сервер отправляется только один раз при старте сессии. При старте сессии все закэшированные сущности удаляются из кэша.

Если в запросе в whereList присутствует ID - кэширование не осуществляется. Запрос на сервер отправляется всегда.

SessionEntity String Кеширование осуществляется на уровне сессии и сущности. Запрос на сервер отправляетсятолько один раз при старте сессии. При этом в запрос добавляется версия закэшированных данных, если таковые имеются. Результат запроса содержит или данные и версию данных, которые помещаются в кэш; или флаг notModified. В этом случае данные считываются из кэша.

Если в запросе в whereList присутствует ID - кэширование не осуществляется. Запрос на сервер отправляется всегда.

Methods

onTransactionComplete()

Predefined callback functions, called when indexedDB transaction complete. Can be customized after UBCache is created. Default implementation will do nothing

onTransactionAbort()

Predefined callback functions, called when indexedDB transaction aborted. Can be customized after UBCache is created. Default implementation will put error to log

onTransactionError()

Predefined callback functions, called when error occurred during indexedDB transaction. Can be customized after UBCache is created. Default implementation will put error to log

get(key, storeNameopt) → Promise

Retrieve data from store by key. If key not found - resolve result to undefined
Arguments:
  1. key (String)
  2. [storeName] (String)  default to 'userData'

getAllKeys(storeNameopt) → Promise

Retrieves all values from store. This is slow operation - try to avoid it
Arguments:
  1. [storeName] (String)  default to 'userData'

put(data, storeNameopt) → Promise

Put one or several values to store (in single transaction). Modifies existing values or inserts as new value if nonexistent.

If value === undefined we put null instead, to understand in future get this is null value or key not exist

Arguments:
  1. data (Object|Array.<{key: string, value}>)
  2. [storeName]   default to 'userData'

clear(storeNameopt) → Promise

Removes all data from the store
Arguments:
  1. [storeName] (String)  default to 'userData'

remove(key, storeNameopt) → Promise

Remove data from store.

  • If key is String - we delete one key;
  • If key is Array - we delete all keys in array;
Arguments:
  1. key (String|Array.<String>|RegExp)
  2. [storeName]   default to 'userData'
Example
//remove data with key = 'key1' from userData store
$App.cache.remove('key1').done();

//remove 2 rows: with key = 'key1' and 'key2'  from session store
$App.cache.remove(['key1', 'key2'], UBCache.SESSION).done();

removeIfMach(regExp, storeNameopt) → Promise

Remove data from store where keys match regExp. Internally use UBCache#getAllKeys so is slow. Better to use remove([key1, ..keyN])
Arguments:
  1. regExp (RegExp)
  2. [storeName]   default to 'userData'
Example
console.time('removeIfMach');
$App.cache.removeIfMach(/^admin:ru:cdn_/, 'permanent').done(function(){
   console.timeEnd('removeIfMach');
})