ちょうどFirestoreストレージと最初に行うべきことを模索し始めて - (グーグルで認証、おそらくそれは重要ではありません)ドキュメントキーで私のAndroidアプリでシンプルな小型のドキュメントをお読みください。ここでFirestoreドキュメントのget()パフォーマンス
public void readDoc(final String key) {
final long start = System.currentTimeMillis();
docsCollection.document(key).get().addOnCompleteListener(
new OnCompleteListener<DocumentSnapshot>() {
@Override public void onComplete(@NonNull Task<DocumentSnapshot> task) {
long end = System.currentTimeMillis();
Log.d("FirestoreStorage", "get() time: " + (end - start));
}
});
}
は、私がLogCatで見るものである:ここでは、スニペットがある最初の読み取りは、常に非常に遅いです
10-10 22:30:06.026 D/FirestoreStorage: get() time: 1666
10-10 22:30:08.199 D/FirestoreStorage: get() time: 264
、それ以降は200msの約されている読み込みます。ドキュメントは実際には小さく、現在は4つのプロパティのみで、1つ(int)はnullではないため、サイズは問題になりません。質問のAndroid 7.1に
、実際の電話でネクサス6アプリを実行している:私が間違っているのでしょうか?私は基本的にどのように-へのガイドの「"Getting dataからのサンプルを使用しています。
Aは0ミリ秒を取る必要があり、このように読む。回避策がない場合、私は私のようにリアルタイムストレージのアイデアを放棄しなければならないと思いますアプリのためだけのストレージおよびバックプレーンのSQLiteに取得し、別のクラウド・ストレージとしてFirebase/Firestoreを使用しています。
PS Firestoreストレージの初期化とそれに対応するログ、申し訳ありませんではない500msのが、350、それは時々、時には400、違います300:
public FirestoreStorage(String userRef) {
Log.i(TAG, "User ref: \"" + userRef + "\"");
db = FirebaseFirestore.getInstance();
Log.i(TAG, "Is persistence enabled: " + db.getFirestoreSettings().isPersistenceEnabled());
DocumentReference userDoc = db.collection("users").document(userRef);
prefsCollection = userDoc.collection("prefs");
prefsCollection.addSnapshotListener(
Executors.newFixedThreadPool(2),
new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
Log.d(TAG, "Prefs.onEvent");
}
});
Log.i(TAG, "Snapshot listener added");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
ログ:
10-11 23:11:42.382 I/FirestoreStorage: User ref: "<cut>"
10-11 23:11:42.474 I/FirestoreStorage: Is persistence enabled: true
10-11 23:11:42.496 I/FirestoreStorage: Snapshot listener added
10-11 23:11:42.855 D/FirestoreStorage: Prefs.onEvent
どのようにネットワークコールが0ミリ秒でデータを返すと思いますか? –
私はそうではありません。私はそこにネットワークが関わっているとは思っていませんでしたが、ローカルにキャッシュしたバージョンを返すと思っていました。それがリスナーを付けるときに得られるものなら、どうして違いがあるのでしょうか?それは非常に混乱しています。理想的には、サーバーから実際のデータを取得しようとするか、ローカルデータを高速にしたいかどうかを示すフラグを使用することをお勧めします。 – smok