2015-10-15 74 views
3

对不起,这是一个愚蠢的问题,然后我溺水在一杯水(不稀罕BTW)。有没有办法用预装的(随时可用的)PouchDB数据库设置一个web(理想的cordova)应用程序?理想情况下,我希望在做db = new PouchDB('databaseName')时准备使用PouchDB数据库文件,而无需在应用程序第一次运行时加载所有文档。PouchDB预加载数据库

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

干杯!

+0

这可能会让你朝着正确的方向:http://stackoverflow.com/questions/9004428/pre-populate-client-database-with-phonegap-primary-target-android –

回答

3

编辑:您现在可以预加载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. 为了避免在初始加载过程中阻止用户,请将您的转储文件分解为一些关键数据的子集,先加载并随后加载剩余的数据。
+0

谢谢!现在我要使用SQLite解决方案,尽管有很多不稳定的问题,但我的数据库不会有大量的数据需求,但预先填充的数据是一个巨大的优势。我虽然也在倾销加载解决方案(如果出现问题,请保留备份)。顺便说一句,不要完全扮演幽灵的角色;和我的不好,我可以诉诸https://github.com/pouchdb/pouchdb/issues/4063之前,或者你可以指向我:-) – Sarasti

+0

PhantomJS将从命令行创建SQLite数据库;否则你不得不启动一个Android模拟器或其他东西,运行它,然后手动将SQLite DB从设备中拷贝出去。我猜也是有效的。 – nlawson

+0

感谢您澄清phantomjs。最后,我在上面引用的github问题(使用chrome)中发布了它。现在,当我尝试使用'createFromLocation:1'加载一个cordova测试应用程序中的sqlite数据库并且执行db.info()时,我得到'{“doc_count”:0,“update_seq”:0,“sqlite_plugin”:真的, “websql_encoding”: “UTF-8”, “DB_NAME”:“guide300。sqlite“,”auto_compaction“:false,”adapter“:”websql“}',但我知道sqlite数据库文件具有我可以看到使用直接sqlite API的任何提示文件,可能Chrome需要做些什么?干杯!! – Sarasti