我正在和Cordova一起写一本字典应用程序。数据大小约为20MB。
我希望应用完全脱机工作,并在本地查询数据。我发现PouchDB真的很适合。
但是,我还希望将所有数据预先安装在应用程序中(采用JSON格式)。也就是说,将所有数据放在app包中(在Cordova项目的www / data文件夹中)。
据我所知,到目前为止,PouchDB可以从服务器创建数据或同步数据,但我想知道如何利用应用程序www文件夹中的数据文件。 < / p>
而且,我应该如何格式化数据文件以便 PouchDB可以直接从中查询,而无需先从文件中读取然后将数据插入到PouchDB中。
有没有人有任何想法?或者也许任何其他可以实现此目的的JS库?
谢谢!
答案 0 :(得分:2)
经过一些研究后,我想比较一些可能的选项:
直接使用PouchDB
这是不实际的,因为:1)你必须在第一次启动时将数据插入PouchDB,这可能非常慢; 2)内存使用率很高,因为您将首先将所有数据加载到内存中(除非您将它们拆分); 3)Cordova应用程序无法在后台运行;用户可以在插入数据时退出应用程序。
PouchDB的sqlite插件
可能的解决方案。您需要使用文件传输插件将数据复制到“工作文件夹”中。
缺点:
将数据拆分为app包内的较小json文件(在/ www文件夹中)
这是我目前使用的。我将数据拆分为大约100个较小的.json文件,并将它们放在/ www文件夹中。然后我可以使用XHR请求根据查询动态加载它们。
亲:
缺点:
Lokijs
Lokijs是一个高性能的内存数据库。它可以从JSON加载数据库,或者(使用unoffical plugin)从文件系统加载数据库。
缺点:
另一件值得期待的事情是PouchDB的Filesystem适配器。至少有些人正在考虑这个问题:https://github.com/pouchdb/pouchdb/issues/4631
预加载数据时出现问题:
预加载数据通常意味着将数据从应用程序包内部复制到操作系统提供的数据目录(根据平台的不同而不同)。
经常涉及Cordova的文件插件和文件传输插件。 目前File插件无法访问app包内的数据(尽管appDirectory是在插件中定义的)。您必须使用文件传输插件将数据文件从应用程序包复制到数据文件夹。
答案 1 :(得分:0)
http://pouchdb.com/adapters.html 请特别注意sqlite插件。您可以找到生成的sqlite数据库并将其分发。