Skip to content

Instantly share code, notes, and snippets.

@justinbarry
Created April 29, 2020 22:16
Show Gist options
  • Save justinbarry/9029e4d9e47369e4ea2ac275a9add5d9 to your computer and use it in GitHub Desktop.
Save justinbarry/9029e4d9e47369e4ea2ac275a9add5d9 to your computer and use it in GitHub Desktop.
(function showIndexedDbSize() {
"use strict";
var db;
var storesizes = new Array();
function openDatabase() {
return new Promise(function(resolve, reject) {
//prompt for DB name
var dbname = prompt('Please enter your Database Name', '');
if (dbname !== null) {
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) {
var szBytes = toSize(items);
var szMBytes = (szBytes / 1024 / 1024).toFixed(2);
storesizes.push({'Store Name': storename, 'Items': items.length, 'Size': szMBytes + 'MB (' + szBytes + ' bytes)'});
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;
console.log(JSON.stringify(items.slice(1500,1505)));
for (var i = 0; i < items.length; i++) {
var objectSize = JSON.stringify(items[i]).length;
size += objectSize * 2;
}
return size;
}
openDatabase().then(function(stores) {
var PromiseArray = [];
for (var i=0; i < stores.length; i++) {
PromiseArray.push(getObjectStoreData(stores[i]));
}
Promise.all(PromiseArray).then(function() {
console.table(storesizes);
});
});
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment