PhoneGap と HTML5 アプリケーション キャッシュを使用して、firebase を使用してモバイル アプリを作成することを考えています。
各ユーザーが TODO 項目のリストを持っているとします。電話がオフラインのときにアプリを起動した場合、前回のセッションからデータを読み込んで、接続が確立されたときに同期できますか? もしそうなら、私はfirebase.jsでlocalStorageへの参照を見つけることができなかったので、これがどのように実装されているのか疑問に思っています.
PhoneGap と HTML5 アプリケーション キャッシュを使用して、firebase を使用してモバイル アプリを作成することを考えています。
各ユーザーが TODO 項目のリストを持っているとします。電話がオフラインのときにアプリを起動した場合、前回のセッションからデータを読み込んで、接続が確立されたときに同期できますか? もしそうなら、私はfirebase.jsでlocalStorageへの参照を見つけることができなかったので、これがどのように実装されているのか疑問に思っています.
簡単な答えは:まだです。
アプリがFirebaseに接続すると、クライアントはデータをローカルにキャッシュし、ネットワーク接続が失われた後でも、未処理の「オン」コールバックがあるデータにアクセスできるようになります。ただし、このデータはディスクに保持されません。「オフラインモード」は、アプリの実行中にのみ機能します。
将来的には完全なオフラインサポートが提供される予定です。
2016年の編集:ネイティブiOSおよびAndroidアプリで完全なオフラインサポートが可能になりました:https ://www.firebase.com/blog/2015-05-29-announcing-mobile-offline-support.html
JS アプリでこの問題を解決する Firebase の代替手段は、CouchDb (サーバー) <=> PouchDb (JS クライアント) です。きれいなクライアント側サービス レイヤーを実装した場合、PouchDb への移植は非常に簡単です。どちらも NoSQL/JSON データベースだからです。CouchDb は、インデックス付きの map/reduce ビューもサポートしています。
PouchDb は、完全にオフラインのCouchDb クライアントを実装する Javascript APIです。ローカル ストレージ、IndexDb、またはWebSQLのいずれかを自動検出して使用し、オンラインでもオフラインでもローカル データを永続的に保持できます。PouchDb API を使用して、ローカル データベースまたはリモート データベースにアクセスし (URL を変更するだけ)、2 つの間の完全な同期またはフィルター処理された同期を結び付けることができます。AngularJS の Q promises API をサポートするための便利な PouchDb プラグイン、コード サンプル、小さなラッパー ライブラリが多数あります。
PouchDb を使用すると、オフライン中にアプリを安全に起動し、数日後にアプリを再起動してすべての CUD データの変更をサーバーに同期できます。これにより更新の競合が発生する可能性があるため、CouchDb はこれを検出して追跡するように設計されたレコードのバージョン管理をサポートしています。したがって、これらの競合を解決するには、サーバー側のロジックが必要になる可能性があります。これは、オフライン同期と CouchDb の重要な機能を備えた分散システムでは避けられません。Firebase がこの MVCC 機能をサポートしているかどうかはわかりません。
PouchDb は基本的に、同期プロトコルを含む Apache CouchDb の再実装です。CouchDb と PouchDb はどちらも、十分にテストされた無料のオープン ソースです。オープン ソースであることは、CouchDb サーバーをイントラネット サービスとして展開することもできることを意味し、オプションで外部クラウド サービスと同期することもできます。CouchDb ホスティング プロバイダーは多数あります。
IBM の Cloudant ホスティング チームは最近、BigCouch クラスタリング機能を Apache CouchDb 2.0 プロジェクトに追加したため、Micro Db (PouchDb) => Single Server => Multi-Master (Replicated) => Big Couch Clustered / Geo Clustered からスケーリングできるようになりました。MongoDb とは異なり、CouchDb は単一サーバー展開を安全にサポートします。
注: PouchDb は、同じプロトコルを使用して CouchBase と同期することもできますが、Couchbase !== CouchDb です。業務用商品です。
もう 1 つのクールなトリックは、CouchDb の代わりとして NodeJS サーバー内で PouchDb を実行できることです。(まだ)本番環境で使用する準備はできていませんが、単体テストには非常に便利です。express-pouchdbを参照してください。
CouchDb に移行する際に考慮する必要がある 1 つの問題は、アクセス制御モデルがより制限されていることです。これは、レプリケーション アルゴリズムが原因の 1 つです。このブログ投稿では、これについて詳しく説明しています (実際の決定的なガイドよりも優れています)。
実際には、パフォーマンスがはるかに優れているため、PouchDB ストレージに WebSQL を使用することをお勧めします。-ストレージ アダプタの詳細はこちら
多作な PouchDb コミュニティからオープン ソース ドアから常に新しいクールな "クリスマス ツリー" グッズが驚くほどたくさん出てきます。
PouchDb の最も優れた機能の 1 つは、すべてのオープン ソースプラグイン(37) と UI フレームワーク アダプター (12) です。