Skip to content

Instantly share code, notes, and snippets.

@grav
Created January 7, 2020 14:05
Show Gist options
  • Save grav/8be973fa7beb6b068c8f959fa901f0d9 to your computer and use it in GitHub Desktop.
Save grav/8be973fa7beb6b068c8f959fa901f0d9 to your computer and use it in GitHub Desktop.
Measure total size of all indexeddb objects
// forked from
// https://github.com/jonnysmith1981/getIndexedDbSize
function showIndexedDbSize(dbname) {
"use strict";
var db;
var totalSize = 0
function openDatabase(dbname) {
return new Promise(function(resolve, reject) {
var request = window.indexedDB.open(dbname);
request.onsuccess = function (event) {
db = event.target.result;
resolve(db.objectStoreNames);
};
});
}
function getObjectStoreData(storename) {
return new Promise(function(resolve, reject) {
var trans = db.transaction(storename, IDBTransaction.READ_ONLY);
var store = trans.objectStore(storename);
var items = [];
trans.oncomplete = function(evt) {
totalSize += toSize(items)
resolve();
};
var cursorRequest = store.openCursor();
cursorRequest.onerror = function(error) {
reject(error);
};
cursorRequest.onsuccess = function(evt) {
var cursor = evt.target.result;
if (cursor) {
items.push(cursor.value);
cursor.continue();
}
}
});
}
function toSize(items) {
var size = 0;
for (var i = 0; i < items.length; i++) {
var objectSize = JSON.stringify(items[i]).length;
// why times two?
size += objectSize * 2;
}
return size;
}
return openDatabase(dbname).then(function(stores) {
var PromiseArray = [];
for (var i=0; i < stores.length; i++) {
PromiseArray.push(getObjectStoreData(stores[i]));
}
return Promise.all(PromiseArray).then(function() {
return totalSize
});
});
}
indexedDB.databases().then(dbs=>dbs.map(db=>db.name)).then(dbnames=>dbnames.map(showIndexedDbSize)).then(v=>Promise.all(v)).then(sizes=>sizes.reduce(function(x,y){return x+y})).then(console.log)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment