【问题标题】:Can a browser extension download a ready-to-use IndexedDB database?浏览器扩展可以下载现成的 IndexedDB 数据库吗?
【发布时间】:2019-11-23 13:22:30
【问题描述】:

我想创建一个使用大型数据库(约 100 万个条目)的浏览器扩展程序(Chrome、Firefox)。由于扩展会非常频繁地使用数据,因此必须将其下载到客户端。

我读到可以从服务器下载 JSON 文件,然后将其添加到 IndexedDB。但这对于大型数据库将花费大量时间。由于浏览器扩展只会读取数据而不会更改它,我想知道扩展是否可以从服务器下载现成的 IndexedDB。因此,服务器将创建数据库,客户端只需下载并立即使用它。

或者是否有一种完全不同的方法可以让浏览器扩展访问大型数据库,而不必每次都访问远程数据库?

【问题讨论】:

  • 它会“非常频繁地”使用所有一百万个条目,还是您可以简单地为最常用的数据保留一个缓存?您甚至可以使缓存条目永不过期,这样您就可以随时有效地构建本地数据库,以换取较慢的初始请求。重建、刷新或重组数据的能力通常很有用,即使您现在确定现有条目的数据不会改变。
  • 您可以将其视为一个拼写检查器,用于检查所有网页的拼写错误,或者一个过滤程序,用于检查网站上的所有链接并过滤掉不适合儿童使用的链接。所以它可以使用缓存,但仍然必须为每个页面请求发出数百个数据库请求。
  • 如果您要制作一个过滤大量 URL 的扩展程序,您可以使用 Bloom filter 来显着提高存储和性能。这可以将物理命中率降低到“物理查找”(即缓存命中)非常罕见的程度,以至于它必须上线并不重要。 (我知道,这仍然不是您问题的直接答案。)

标签: indexeddb browser-extension


【解决方案1】:

您无法下载您所指的“indexedDB 数据库”。哪有这回事。就实际文件和每个文件中的数据格式而言,数据如何存储在 indexedDb 中,不是 indexedDb API 的一部分。不打算以这种方式访问​​它。

您可以做的是使用可传输格式下载数据。在这种情况下使用的一种非常受支持且常用的格式是 JSON。 JSON 是一种很好的数据下载格式。

考虑编写一个在服务器上创建 JSON 响应的程序。然后,浏览器扩展可以下载 JSON 文件,然后在与浏览器扩展关联的上下文中在浏览器的 indexedDb 数据库中创建对象。换句话说,将服务器上数据库中的数据导出为 JSON,通过 HTTP 传输一个或多个 json 文件或响应体,然后将 json 导入 indexedDb。这是一个非常常规的程序设计,与数据大小无关。

在使用扩展程序(例如 Chrome 扩展程序)时,您可以指定不受数据大小限制,您将获得“几乎”不受限制的数据,最高可达计算机存储容量(硬盘大小)的某个百分比。

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多