首页 > 解决方案 > 如何以编程方式获取 indexedDB 中每个 objectStore 的当前数据大小?

问题描述

我想以编程方式获取 indexedDB 中每个 objectStore 的当前数据大小(以 MB/GB 为单位的使用情况)。

我认为这可能是一个受欢迎的问题,但我在 StackOverflow 中找不到任何类似的问题/答案。

这可能吗?

标签: javascriptindexeddb

解决方案


如果数据库条目的数量很多,这段代码需要很长时间,但我可以通过这段代码得到结果。

    const countDB = async (db, table) => {
        return new Promise((resolve, reject) => {
            const tx = db.transaction([table], 'readonly');
            const store = tx.objectStore(table);
            const cursorReq = store.openCursor();
            let count = 0;
            let size = 0;
            cursorReq.onsuccess = function(e) {
                const cursor = cursorReq.result;
                if (cursor) {
                    count++;
                    size = size + cursor.value.blob.size;
                    cursor.continue();
                }
            };
            cursorReq.onerror = function(e) {
                reject(e);
            };
            tx.oncomplete = function(e) {
                resolve({
                    count: count,
                    size: size
                });
            };
            tx.onabort = function(e) {
                reject(e);
            };
            tx.onerror = function(e) {
                reject(e);
            };
        });
    };

推荐阅读