【发布时间】:2019-11-23 13:22:30
【问题描述】:
我想创建一个使用大型数据库(约 100 万个条目)的浏览器扩展程序(Chrome、Firefox)。由于扩展会非常频繁地使用数据,因此必须将其下载到客户端。
我读到可以从服务器下载 JSON 文件,然后将其添加到 IndexedDB。但这对于大型数据库将花费大量时间。由于浏览器扩展只会读取数据而不会更改它,我想知道扩展是否可以从服务器下载现成的 IndexedDB。因此,服务器将创建数据库,客户端只需下载并立即使用它。
或者是否有一种完全不同的方法可以让浏览器扩展访问大型数据库,而不必每次都访问远程数据库?
【问题讨论】:
-
它会“非常频繁地”使用所有一百万个条目,还是您可以简单地为最常用的数据保留一个缓存?您甚至可以使缓存条目永不过期,这样您就可以随时有效地构建本地数据库,以换取较慢的初始请求。重建、刷新或重组数据的能力通常很有用,即使您现在确定现有条目的数据不会改变。
-
您可以将其视为一个拼写检查器,用于检查所有网页的拼写错误,或者一个过滤程序,用于检查网站上的所有链接并过滤掉不适合儿童使用的链接。所以它可以使用缓存,但仍然必须为每个页面请求发出数百个数据库请求。
-
如果您要制作一个过滤大量 URL 的扩展程序,您可以使用 Bloom filter 来显着提高存储和性能。这可以将物理命中率降低到“物理查找”(即缓存命中)非常罕见的程度,以至于它必须上线并不重要。 (我知道,这仍然不是您问题的直接答案。)
标签: indexeddb browser-extension