如何计算chrome中的indexedDB表大小?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算chrome中的indexedDB表大小?相关的知识,希望对你有一定的参考价值。
我在chrome浏览器上使用pouchDB
和IndexedDB
适配器,我想计算每个IndexedDB数据库大小。我使用https://github.com/jonnysmith1981/getIndexedDbSize/blob/master/getIndexedDbSize.js的代码进行计算。
我发现数据库的总大小远远大于webkit临时存储使用量。
截图下面是我的应用程序使用的总存储空间(255MB)。
您将看到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?
如何从 JavaScript 中删除整个 IndexedDB 数据库?
如何解决IndexedDB在webkit内核下新旧版本的兼容问题