15

同じデータを取得し、リストとGoogleマップのマーカーの2つの異なる方法で表示するFirebaseを使用してウェブアプリケーションを構築しています。

現在、各ビュー(マップまたはリスト)には、Firebaseからデータをクエリし、それらをマージして表示するコードがあります。代わりに、私はこの計画を検討しています。起動時に、データをクエリし、マージして、ビューからビューに渡す配列にすべて保存します。

ある意味で、Firebaseデータを配列に「キャッシュ」しています。これはある意味では理想的ではありません。キャッシュされたデータは、Firebaseに直接クエリを実行するほど最新ではありません。一方、Firebaseを呼び出すのは1回だけです。

これはパフォーマンスに意味がありますか?Firebaseからのデータの読み取りには、アレイからのデータの読み取りと同じ桁の時間がかかりますか?

4

1 に答える 1

22

通常、Firebase の使用を制限するためにデータをキャッシュする必要はありません。Firebase は、クライアント上で「アクティブな」データの独自のキャッシュを維持します。「アクティブ」とは、「オン」コールが未解決のデータとして定義されます。したがって、アクティブなデータの場合、追加の「on」または「once」呼び出しでは、データが既に読み込まれているため、ネットワーク トラフィックは必要ありません。

「firebaseのクエリ」の意味が完全にはわかりません。Firebase には、従来の意味でのクエリはありません。コールバックをアタッチするためのメソッドがあるだけです。Firebase から定期的にデータを取得するために「once()」関数を使用していますか? もしそうなら、これは非常に非効率的である可能性があります。Once は便利なメソッドであり、通常、アクセス頻度が非常に低いデータや、何らかの理由で開発者がリアルタイムで更新したくないデータにのみ使用する必要があります。once() の完了時に未解決のアクティブな「on」呼び出しがない場合、Firebase はそのデータのキャッシュをフラッシュし、その後の once() の呼び出しではサーバーへのラウンドトリップが必要になります。

最新バージョンのデータのローカル コピーに効率的に同期的にアクセスする方法が必要な場合は、次の方法をお勧めします。

var savedSnapshot = null;
dataRef.on("value", function(snapshot) {
  savedSnapshot = snapshot;
});

//and then when you need to read the data
var theData = savedSnapshot.val()

単一の on() 呼び出しを維持することにより、Firebase は、必要なたびにすべてのデータをリロードするのではなく、変化が生じたときにネットワーク経由でデルタを送信するだけで、データを最新の状態に保つことができます。

于 2012-08-16T18:01:23.490 に答える