9

私の質問は、このトピックのフォローアップです。これまで見た中で、Firebase のシンプルさとパフォーマンスが気に入っています。

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

結果として:

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

スナップショット データは Javascript オブジェクトとしてメモリ内に存在するため、JSON としてシリアル化して localStorage に保存するのは非常に簡単なはずです。そのため、次にアプリを起動したときに、オンラインであるかどうかにかかわらず、正確なアプリケーションの状態を読み込むことができます。しかし、firebase.js のコードは縮小されていてわかりにくいので、どこを見ればよいかわかりません。

PouchDBは、CouchDB バックエンドでこれをうまく処理します。(しかし、Firebase の素早い応答時間とシンプルさが欠けています。)

だから私の質問は:

1. スナップショットを localStorage に保存するには、どのデータをシリアル化する必要がありますか? アプリの起動時にこれを Firebase にロードするにはどうすればよいですか?

2. firebase.js の縮小されていない元の開発ソース コードはどこからダウンロードできますか?

(ちなみに、Firebase が競合他社を圧倒するのに役立つ 2 つの機能は、オフライン キャッシングとマップ リデュースです。)

4

1 に答える 1

11

オフライン キャッシングと地図の縮小に似た機能は、どちらも開発中です。firebase.jsソースは、開発およびデバッグ用にここから入手できます。

exportValを使用してスナップショットをローカルでシリアライズし、すべての優先データを保持できます。優先順位を使用していない場合は、単純な値で十分です。

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を使用してこれを判断します) 、.set()を呼び出してそのデータをローカルの Firebase に戻すことができます。Firebase がオンラインになると、同期されます。

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

これに対処する方法はたくさんあります。競合の解決、セキュリティ ルールの使用、カウンター/タイムスタンプの更新による古いデータの検出とリグレッションの防止などです。

于 2013-11-08T13:57:38.153 に答える