Cordova和PouchDB的离线数据

时间:2015-11-01 10:05:08

标签: javascript cordova pouchdb offlineapps

我正在和Cordova一起写一本字典应用程序。数据大小约为20MB。

我希望应用完全脱机工作,并在本地查询数据。我发现PouchDB真的很适合。

但是,我还希望将所有数据预先安装在应用程序中(采用JSON格式)。也就是说,将所有数据放在app包中(在Cordova项目的www / data文件夹中)。

据我所知,到目前为止,PouchDB可以从服务器创建数据或同步数据,但我想知道如何利用应用程序www文件夹中的数据文件。 < / p>

而且,我应该如何格式化数据文件以便 PouchDB可以直接从中查询,而无需先从文件中读取然后将数据插入到PouchDB中。

有没有人有任何想法?或者也许任何其他可以实现此目的的JS库?

谢谢!

2 个答案:

答案 0 :(得分:2)

经过一些研究后,我想比较一些可能的选项:

  1. 直接使用PouchDB

    这是不实际的,因为:1)你必须在第一次启动时将数据插入PouchDB,这可能非常慢; 2)内存使用率很高,因为您将首先将所有数据加载到内存中(除非您将它们拆分); 3)Cordova应用程序无法在后台运行;用户可以在插入数据时退出应用程序。

  2. PouchDB的sqlite插件

    可能的解决方案。您需要使用文件传输插件将数据复制到“工作文件夹”中。

    缺点:

    • 有点麻烦,因为您需要另一个工作流来创建sqlite文件。
    • PouchDB的sqlite适配器无法通过所有测试套件,并且可能会因官方文档的建议而变慢。
    • 额外空间使用量(2x);应用程序包中的数据必须复制到数据文件夹中才能供Sqlite使用。
  3. 将数据拆分为app包内的较小json文件(在/ www文件夹中)

    这是我目前使用的。我将数据拆分为大约100个较小的.json文件,并将它们放在/ www文件夹中。然后我可以使用XHR请求根据查询动态加载它们。

    亲:

    • 不需要额外的空间;只有一份数据

    缺点:

    • 丢失PouchDB及其查询方法的所有功能;它基本上是实现自定义只读数据库。
  4. Lokijs

    Lokijs是一个高性能的内存数据库。它可以从JSON加载数据库,或者(使用unoffical plugin)从文件系统加载数据库。

    缺点:

    • 因为Lokijs是一个内存数据库。内存使用可能是大数据大小和移动设备上的问题。
  5. 另一件值得期待的事情是PouchDB的Filesystem适配器。至少有些人正在考虑这个问题:https://github.com/pouchdb/pouchdb/issues/4631

    预加载数据时出现问题:

    预加载数据通常意味着将数据从应用程序包内部复制到操作系统提供的数据目录(根据平台的不同而不同)。

    经常涉及Cordova的文件插件和文件传输插件。 目前File插件无法访问app包内的数据(尽管appDirectory是在插件中定义的)。您必须使用文件传输插件将数据文件从应用程序包复制到数据文件夹。

答案 1 :(得分:0)

http://pouchdb.com/adapters.html 请特别注意sqlite插件。您可以找到生成的sqlite数据库并将其分发。