質問

私の質問はフォローアップです このトピック. 。私はこれまでに見たものからのFirebaseのシンプルさとパフォーマンスが大好きです。

私が理解しているように、firebase.jsは、サーバーからJavaScriptメモリのオブジェクトにデータスナップショットを同期します。ただし、現在、このデータをディスクにキャッシュする機能はありません。

結果として:

  1. アプリケーションは起動時に接続する必要があるため、真のオフラインアクセスはありません。
  2. 以前のすべてのデータを再送信することにより、アプリが起動するたびに帯域幅は無駄になります。

スナップショットデータはJavaScriptオブジェクトとしてメモリに座っているため、JSONとしてシリアル化してLocalStorageに保存することは非常に簡単である必要があるため、アプリがオンラインで開始されるかどうかにかかわらず、正確なアプリケーション状態をロードできます。しかし、firebase.jsコードが模倣されており、謎めいた場所であるため、どこを見るべきかわかりません。

PouchDB これをCouchDBバックエンドで非常にうまく処理します。 (ただし、Firebaseの迅速な応答時間とシンプルさがありません。)

だから私の質問は次のとおりです。

1. SnapshotをLocalStorageに保存するために、どのデータをシリアル化する必要がありますか?アプリが起動したときに、これをFireBaseに戻すにはどうすればよいですか?

2. firebase.js用の元の非マイニッシュされた開発ソースコードをどこでダウンロードできますか?

(ところで、Firebaseが競争を水から吹き飛ばすのに役立つ2つの機能:オフラインのキャッシュとマップが減少します。)

役に立ちましたか?

解決

オフラインのキャッシュとマップ削減様の機能は両方とも開発中です。 firebase.js ソースはこちらから入手できます 開発とデバッグ用。

ローカルでスナップショットをシリアル化できます エクスポート すべての優先度データを保存します。優先順位を使用していない場合、単純な値は次のとおりです。

var fb = new Firebase(URL);
fb.once('value', function(snapshot) {
   console.log('values with priorities', snapshot.exportVal());

   console.log('values without priorities', snapshot.val());
});

後で、Firebaseがオフラインの場合(使用してください .info/connected これを決定するのに役立つ)アプリがロードされたら、電話することができます 。設定() そのデータをローカルファイアベースに戻す。 Firebaseがオンラインで来る場合//場合、同期されます。

ただし、これは、1人だけがアクセスして変更する静的データにのみ適しています。たとえば、データをダウンロードし、1週間ローカルに保持する場合、フォールアウトを考えてみてください。その間、他のユーザーによって変更されてから、アプリをオフラインで読み込み、1つのマイナーな変更を加えてからオンラインになります。私の古い変化は、その間に行われたすべての作業を吹き飛ばすでしょう。

これに対処する方法はたくさんあります - セキュリティルールと更新カウンター/タイムスタンプを使用して古いデータを検出し、回帰を防ぐことができますが、これは単純な出来事ではなく、このルートを下る前に深い検討が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top