如何计算chrome中的indexedDB表大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算chrome中的indexedDB表大小?相关的知识,希望对你有一定的参考价值。

我在chrome浏览器上使用pouchDBIndexedDB适配器,我想计算每个IndexedDB数据库大小。我使用https://github.com/jonnysmith1981/getIndexedDbSize/blob/master/getIndexedDbSize.js的代码进行计算。

我发现数据库的总大小远远大于webkit临时存储使用量。

截图下面是我的应用程序使用的总存储空间(255MB)。

enter image description here

您将看到IndexedDB中保存了5个数据库。以下输出是每个数据库大小的计算结果。您将看到总大小约为389MB。我想知道为什么他们完全不同。哪一个是正确的?

--------- _pouch_products -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 86.7 MB
VM1633:51  - detect-blob-support    : 2 B
VM1633:51  - document-store : 92.3 MB
VM1633:51  - local-store    : 6.1 KB
VM1633:51  - meta-store : 96 B
VM1633:57 TOTAL: 179.0 MB

--------- _pouch_transactions -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 13.7 KB
VM1633:51  - detect-blob-support    : 2 B
VM1633:51  - document-store : 2.2 KB
VM1633:51  - local-store    : 4.2 KB
VM1633:51  - meta-store : 96 B
VM1633:57 TOTAL: 20.2 KB

--------- _pouch_products-mrview-4c294f20854f412a71c9e7cf2f9cc58f -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 11.9 MB
VM1633:51  - detect-blob-support    : 0 B
VM1633:51  - document-store : 35.3 MB
VM1633:51  - local-store    : 15.1 MB
VM1633:51  - meta-store : 136 B
VM1633:57 TOTAL: 62.3 MB

--------- _pouch_products-mrview-fdca57d512425c6ed0f20311a4f8d6d1 -------------
VM1633:51  - attach-seq-store   : 0 B
VM1633:51  - attach-store   : 0 B
VM1633:51  - by-sequence    : 86.2 MB
VM1633:51  - detect-blob-support    : 0 B
VM1633:51  - document-store : 44.2 MB
VM1633:51  - local-store    : 17.4 MB
VM1633:51  - meta-store : 136 B
VM1633:57 TOTAL: 147.7 MB
--------- _product_alerts -------------
VM1633:57 TOTAL: 0 B
答案

索引数据库API不提供查询数据库(或存储/索引)大小的方法。将键和值转换为字节也是由浏览器执行的,并且对脚本不可见。所以脚本必须做一个近似,例如在序列化为字符串时计算商店中所有键和值的大小。

Chrome中的Indexed DB实现使用名为leveldb的后备存储,它具有各种大小优化,例如使用另一个名为“snappy”的库进行密钥前缀压缩和值压缩。字符串也可以多种方式序列化为字节(例如,JS字符串是每个字符16位,可以天真地存储为每个字符2个字节或UTF-8编码为每个字符1-4个字节)。当数据被删除或覆盖时,后备存储也会懒惰地压缩,因此最终可能会占用比临时需要更多的空间。

这些优化都不会对脚本可见,并且所有这些优化都会因跨浏览器而异,因此近似值将为...近似值。鉴于所有这些,估计389MB与浏览器报告的255MB相当不错!

在Chrome中,我们正在尝试通过navigator.storage.estimate() API报告的每类型细分,该API会为每种存储类型提供准确的值(例如,索引数据库与缓存对比...),尽管它仍然不会为每个数据库提供或每个对象的商店值。

以上是关于如何计算chrome中的indexedDB表大小?的主要内容,如果未能解决你的问题,请参考以下文章

我应该只使用IndexedDB还是同时使用IndexedDB和chrome.storage?

如何在 Firefox 中查看 IndexedDB 内容

如何从 JavaScript 中删除整个 IndexedDB 数据库?

如何解决IndexedDB在webkit内核下新旧版本的兼容问题

如何解决IndexedDB在webkit内核下新旧版本的兼容问题

你如何让 indexeddb 事务保持活跃?