Created
January 7, 2020 14:05
-
-
Save grav/8be973fa7beb6b068c8f959fa901f0d9 to your computer and use it in GitHub Desktop.
Measure total size of all indexeddb objects
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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