2015-10-15 75 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