Asynchronous Storage For All Browsers
I have finally implemented and successfully tested the IndexedDB fallback for Firefox so that now every browser, old or new, should be able to use this interface borrowed from localStorage API but made asynchronous.
As it is, usually, values are the bottleneck, RAM consumption speaking, while keys are rarely such big problem.
However, while keys are retrieved asynchronously and in a non-blocking way, but kept in memory, respective values are always retrieved asynchronously in order to do not fill the available amount of RAM for our Web Application.
Please note that if the item was there already, it's simply replaced with the new value.
Please note that if the item was not previously stored, the returned value will be exactly null as it is for localStorage.
However, this is how I would do this task:
Asynchronous Key/Value Pairs
The main purpose of this asyncStorage API is to store large amount of data as string, including base64 version of images or other files.As it is, usually, values are the bottleneck, RAM consumption speaking, while keys are rarely such big problem.
However, while keys are retrieved asynchronously and in a non-blocking way, but kept in memory, respective values are always retrieved asynchronously in order to do not fill the available amount of RAM for our Web Application.
Database Creation/Connection
Nothing more than ...
asyncStorage.create("my_db_name", function (db, numberOfItems) {
// do stuff with the asyncStorage
});
Storing An Item
As it is for localStorage, but async
asyncStorage.create("my_db_name", function (db, numberOfItems) {
db.setItem("a", "first entry", function () {
// done, item stored
});
});
Please note that if the item was there already, it's simply replaced with the new value.
Getting An Item
As it is for localStorage, but async
asyncStorage.create("my_db_name", function (db, numberOfItems) {
db.getItem("a", function (value) {
// done, value retrieved
});
});
Please note that if the item was not previously stored, the returned value will be exactly null as it is for localStorage.
Removing An Item
As it is for localStorage, but async
asyncStorage.create("my_db_name", function (db, numberOfItems) {
db.removeItem("a", function () {
// done, no key a is present anymore
// so length is decreased already here
// and db.get("a") will send a null value
});
});
Removing All Items
As it is for localStorage, but async, and considering that only values in the specified database name will be erased, rather than all of them.
asyncStorage.create("my_db_name", function (db, numberOfItems) {
db.clear(function () {
// done, database "my_db_name" is now empty
});
});
Getting All Items Keys
If this is really what you need to do, bear in mind the API is the same used in the localStorage where indeed there's no way to retrieve all keys if not doing something like:
for (var
keys = [],
i = db.length;
i--;
) {
keys[i] = db.key(i);
}
Getting All Items
Well, the thing here is that you can store an entire object through JSON so if you need to save and get back everything, it's kinda pointless to store different keys, just use one.However, this is how I would do this task:
for (var
object = {},
complete = function () {
alert("Done, all items in the object");
},
ongetitem = function (value, key) {
object[key] = value;
if (!--j) complete();
},
i = db.length,
j = i;
i--;
) {
db.getItem(db.key(i), ongetitem);
}
Comments
Post a Comment