【问题标题】:PouchDB preload databasePouchDB 预加载数据库
【发布时间】:2016-01-14 09:11:15
【问题描述】:

对不起,这是一个愚蠢的问题,然后我被一杯水淹死了(顺便说一句,这并不罕见)。有什么方法可以设置一个带有预加载(准备使用)PouchDB 数据库的 Web(理想情况下是 cordova)应用程序?理想情况下,我想要的是在执行 db = new PouchDB('databaseName') 时准备好使用 PouchDB 数据库文件,而无需在应用程序第一次运行时加载所有文档。

我知道有pouchdb-replication-stream,但我需要加载转储文件,然后应用程序数据的大小将被复制(在转储文件和 PouchDB 数据库中)。也没有机会进行远程加载。

干杯!!

【问题讨论】:

标签: cordova pouchdb


【解决方案1】:

编辑:您现在可以预加载 SQLite 数据库或使用 pouchdb-load; this blog post中有说明。

目前,完全预加载的唯一方法是使用 SQLite 插件,然后在构建步骤中使用 PhantomJS 并将 SQLite 文件复制到您的应用中。

我一般不推荐 SQLite 插件,因为 1) 实现的普遍不稳定和 2) 与 IndexedDB/WebSQL 相比速度较慢。因此,如果我正在编写这样一个应用程序并且我想要尽可能好的预加载性能,我会:

  1. 使用pouchdb-dump-cli 转储到文件
  2. 使用 pouchdb-load 加载到 PouchDB 中,如果您确实需要,在应用加载时在初始加载时抛出一个微调器。

您可以在此处进行一些优化:

  1. worker-pouch 插件适用于 Android(可惜不适用于 iOS),可用于避免阻塞 DOM 操作。应该使用 pouchdb-load 插件,或者您可以在工作人员内部执行所有操作(最好避免 任何 阻塞,而不仅仅是与 IndexedDB 相关的阻塞)。
  2. 为避免在初始加载期间阻塞用户,请将转储文件分解为关键数据的某个子集,先加载该数据,然后再加载其余数据。

【讨论】:

  • 谢谢!!现在我将使用 SQLite 解决方案,尽管有许多不稳定的问题,但我的数据库不会有大量数据需求,但预先填充的数据是一个巨大的优势。我也考虑了转储加载解决方案(在出现问题的情况下保持备份)。顺便说一句,不要完全理解 phantomjs 的作用;而且,我的错,我之前可以求助于github.com/pouchdb/pouchdb/issues/4063,或者你可以指点我:-)
  • PhantomJS 将从命令行创建 SQLite DB;否则,您必须启动 Android 模拟器或其他东西,运行它,然后手动将 SQLite DB 从设备上复制下来。我猜这也行得通。
  • 感谢您对 phantomjs 的澄清。最后,我按照您在上面引用的 github 问题中发布的内容进行了操作(使用 chrome)。现在,当我尝试使用createFromLocation: 1 在cordova 测试应用程序中加载sqlite db 并执行db.info() 时,我得到{"doc_count":0,"update_seq":0,"sqlite_plugin":true,"websql_encoding":"UTF-8","db_name":"guide300.sqlite","auto_compaction":false,"adapter":"websql"},但我知道sqlite db 文件包含使用直接sqlite 可以看到的文档API。对此有任何提示吗?可能 Chrome 必须做点什么?干杯!!
猜你喜欢
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多