PouchDB预加载数据库

3
抱歉,如果这是一个愚蠢的问题,那我就像在一杯水中溺亡(顺便说一句,这种情况并不少见)。有没有办法设置一个预装(可以直接使用)的PouchDB数据库的web(最好是cordova)应用程序?理想情况下,我希望能够在执行db = new PouchDB('databaseName')时直接使用PouchDB数据库文件,而无需在应用程序首次运行时加载所有文档。

我知道有pouchdb-replication-stream,但我需要加载转储文件,然后应用程序数据大小会加倍(转储文件和PouchDB数据库都要占用空间)。此外,也没有远程加载的机会。

干杯!


这可能会让你朝着正确的方向前进:http://stackoverflow.com/questions/9004428/pre-populate-client-database-with-phonegap-primary-target-android - Colin Skow
1个回答

3
编辑:您现在可以预加载SQLite数据库或使用pouchdb-load;有关说明,请参见此博客文章

目前唯一完全预加载的方法是使用SQLite插件,然后使用PhantomJS进行构建,将SQLite文件复制到应用程序中。

由于实现的不稳定性和与IndexedDB/WebSQL相比的速度慢,我通常不建议使用SQLite插件。因此,如果我要编写这样的应用程序,并且希望获得最佳的预加载性能,则会执行以下操作:

  1. 使用pouchdb-dump-cli转储到文件
  2. 使用pouchdb-load加载到PouchDB中,在初始加载时显示旋转标志(如果确实需要)。

您可以进行一些优化:

  1. worker-pouch插件在Android上运行(可悲的是不支持iOS),并可用于避免阻止DOM操作。应该与pouchdb-load插件一起使用,或者您可以将所有内容都放在工作器内(最好避免任何阻塞,而不仅仅是与IndexedDB相关的阻塞)。
  2. 为了避免在初始加载期间阻止用户,请将转储文件分成某些关键数据的子集,首先加载该子集,然后再加载其余数据。

谢谢!目前我打算使用SQLite解决方案,尽管存在许多不稳定的问题,但我的数据库不需要大量数据,但预先填充的数据是一个巨大的优势。我也考虑过备份和还原数据的解决方案(迄今为止作为备份保留)。顺便说一下,我不太清楚phantomjs的角色;另外,我的错误,我之前可以求助于https://github.com/pouchdb/pouchdb/issues/4063,或者您可以指点我 :-) - Sarasti
PhantomJS可以通过命令行创建SQLite数据库;否则,您将不得不启动Android模拟器或类似的东西,运行它,然后手动从设备上复制SQLite数据库。我想这也可以。 - nlawson
谢谢你详细解释关于phantomjs的问题。最后,我按照您在上面引用的GitHub问题中发布的方式(使用Chrome)来完成了。现在,当我尝试在cordova测试应用程序中使用createFromLocation:1加载sqlite数据库并执行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数据库文件有文档,因为我可以使用纯sqlite API查看。这方面有什么提示吗?Chrome可能需要做些什么吗?干杯! - Sarasti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接