通常、Firebaseの使用を制限するためのデータのキャッシュは不要です。 Firebaseは、クライアント上に「アクティブな」データの独自のキャッシュを保持します。 「アクティブ」は、「オン」コールが未処理のデータとして定義されます。したがって、アクティブなデータの場合、追加の「オン」コールまたは「ワンタイム」コールは、データがすでにロードされているため、ネットワークトラフィックを必要としません。
"firebaseを照会する"とは何を意味するのかよくわかりません。 Firebaseは伝統的な意味でクエリを持っていません。コールバックを付加するためのメソッドがあります。 Firebaseから定期的にデータを取得するために "once()"関数を使用していますか?もしそうなら、これは潜在的に非常に非効率的である可能性があります。一度は便利な方法であり、一般的にはアクセス頻度が極端に低いデータや何らかの理由でリアルタイムに更新したくないデータに対してのみ使用する必要があります。 once()が完了したときにアクティブな "on"コールが未処理の場合、Firebaseはそのデータのキャッシュをフラッシュし、その後のonce()コールはサーバへのラウンドトリップを必要とします。
何がしたいことは、同期効率的な方法でデータの最新バージョンのローカルコピーにアクセスする方法であれば、私はこの方法をお勧めします:、()の呼び出しで1つのを維持することで
var savedSnapshot = null;
dataRef.on("value", function(snapshot) {
savedSnapshot = snapshot;
});
//and then when you need to read the data
var theData = savedSnapshot.val()
をFirebaseは、必要なときにすべてのデータをリロードするのではなく、変更があったときにワイヤを介してデルタを送信するだけで、データを最新の状態に保つことができます。
大きな説明。ドキュメントは、この印象を与えるが、そのような詳細には入り込まない(これはドキュメントの大きな付録であるかもしれない)。 – Kato
私たちは近い将来、ドキュメントにいくつかのセクションを掲載する予定です。 –
@AndrewLeeは、このパフォーマンスセクションはこれまでに書かれますか?私はFirebaseを2年間使用していましたが、後で使用するためにdatasnapshotを保存する方法について、この(5歳の)回答が説明されたときとまったく同様に「クリック」しませんでした。私は、Firebaseが何をしているのか知りたくないという恐怖のために、防御的に多くのコーディングを行っていたことを認識しました。 DataSnapshotは、内部の不変なデータ構造へのナビゲート可能なカーソルであり、 'val()'はそのデータをPOJOにクローンすることがわかりました。これはとてもエレガントにデザインされています!脱帽 :-) – skrebbel