2017-07-02 4 views
0
私はプロファイルなどのデータを保存するためにFirebaseリアルタイムデータベースを使用しています私のユニティ2Dのゲームで問題のまわりで私の頭を取得しようとしている

、ヒット、ミス、レベルの進行などユニティFirebase SDK SetRawJsonValueパフォーマンス

今のところ、ユーザーが新しいプロフィール/新しいキャラクターを作成できるシーンに取り組んでいます。 SetRawJsonValueAsyncは本当に遅いですキーの実際のプロファイルの参照を作成することは、ほとんど瞬時である、だから、

var db = FirebaseDatabase.DefaultInstance.RootReference; 

Profile profile = new Profile { 
    userId = GameManager.Instance.User.UserId, 
    name = "Bo Mortensen", 
    age = 34, 
    gender = "M" 
}; 

string json = JsonUtility.ToJson (profile); 

// The Push() is almost instant 
var profileKey = db.Child ("profiles").Push().Key; 

// However, this takes around 3 seconds to return, even when specifying 1 as it's priority.. 
db.Child("profiles").Child(profileKey).SetRawJsonValueAsync (json, 1).ContinueWith (t => { 
    if(t.IsFaulted) { 
     Debug.Log("Faulted.."); 
    } 

    if(t.IsCanceled) { 
     Debug.Log("Cancelled.."); 
    } 

    if(t.IsCompleted) { 
     SceneManager.LoadScene ("Main game scene"); 
    } 
}); 

:私は、次のコードの作業を持っています。次のシーンをロードする前に約5秒かかっていたテストを受けました。

Firebaseではこれは正常ですか?私は何かを返すための仕事を待つべきではなく、次のシーンをロードしている間にそれがバックグラウンドで働くようにする気持ちがあります。これは本当に速いでしょうが、もしそれがキャンセルされたり、フォールトされたらどうなりますか?私はそれを支配しないだろう。

Unityゲームをデバッグモードで実行し、Firebaseが現在開発中のフリー層であるとします。 Firebaseの有料層でパフォーマンスが向上するかどうかは不明です。

ヘルプ/ヒントは大変ありがとうございます。

ありがとうございます。

答えて

1

ここfirebaser

有料プランにごFirebaseプロジェクトをアップグレードすると、性能差があってはなりません。すべてのプロジェクトは同じインフラストラクチャ上で実行されます。

初めてデータベースと対話する場合は、クライアントとサーバー間の(Webソケット)接続の確立に時間がほとんどかかりません。その後、パフォーマンスは主に、送信するデータ量と利用可能な帯域幅に依存します。これらは最も一般的な2つの原因であり、アプリケーションコードの制御から完全にはずれています。

最初の接続を設定する時間を失うかどうかを確認するには、お互いに数回書くコードを実行するのが簡単です。次回の呼び出しが大幅に高速になった場合は、最初の接続を構築するコストを支払っています。そのコストを防ぐためにできることは何もありませんが、アプリライフサイクルの早い段階でデータベースとやりとりして非表示にすることができます。起動時にダミー値を読み書きすることで

JSONの解析には、時間があると思います。しかし、あなたのオブジェクト構造はかなり小さく見えるので、ここではそうは思われません。

通常、タスクが完了する前に移行するのが安全です。 isCancelled()は、サーバー側のセキュリティルールによってデータが拒否された場合にのみtrueになります。コードとセキュリティルールの両方を制御するので、通常は本番環境では発生しません。しかし、私は実際にクライアントが返信するときにはのIsFaulted()を返すことはありません。その呼び出しは、基礎となるiOSやAndroid SDKには存在しないため、Unityクライアントがいつこの条件を発生させるかはわかりません。

+0

ありがとう、フランク!非常に貴重な情報があります。私はデータベースにダミーデータを作成するための別のメソッドを作成しようとしましたが、最初に述べたように遅くなりましたが、その後、データは即座に保存されました! これは、SDKガイドに*本当に*含まれていなければなりません:-)正直なところ、私はFirebaseの代わりに単純な誤解のために近くに探していました。 とにかくもう一度ありがとうございます。ちょうど私の一日を救った:-) –

+0

それは最初の接続だったと聞いてよかった。 Firebaseを使用するほとんどのアプリケーションタイプは、起動時から使用します。したがって、接続を作成するためのコストは一般的な起動コストに隠されており、その場合はさらに隠すことはできません。あなたのシステムでは、データベースを後で使用するのではなく、コストを隠す方法があるようです。しかし、これは確かにドキュメントに対する一般的なアプローチが役に立たなかったケースの1つです。 –

関連する問題