2017-07-02 102 views
0

我試圖讓我的身邊和我團結2D遊戲的問題,頭在那裏我用火力地堡實時數據庫來存儲像規範的數據,命中,命中,發展水平等團結火力地堡SDK SetRawJsonValue性能

目前,我正在開發用戶可以創建新配置文件/新角色的場景。我有下面的代碼工作:

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"); 
    } 
}); 

因此,創建密鑰的實際輪廓參考幾乎是瞬間,其中SetRawJsonValueAsync實在是太慢了。進行了一次測試,在加載下一個場景之前需要大約5秒。

Firebase是否正常?我有一種感覺,我不應該等待任務返回任何東西,而只是讓它在後臺工作,而我加載下一個場景。這將會非常快,但如果它被取消或故障怎麼辦?我無法控制。

應該說我在調試模式下運行我的Unity遊戲,並且Firebase目前是用於開發的免費層。不確定性能是否會隨着付費級別的Firebase的增加而增加。

任何幫助/提示是非常感謝!

在此先感謝。

回答

1

這裏

firebaser不會有從火力地堡計劃升級到付費套餐的性能差異。所有項目都運行在同一個基礎設施上

如果這是您第一次與數據庫交互,您將失去大多數時間在客戶端和服務器之間建立(Web套接字)連接。在這之後,性能主要取決於您發送的數據量與您可用的帶寬。這是最常見的兩個原因,完全不受應用程序代碼的控制。

快速檢查您是否失去了設置初始連接的時間的方法是運行相繼寫入幾次的代碼。如果接下來的通話速度明顯加快,那麼您需要支付構建初始連接的費用。沒有辦法阻止這種成本,但您可以通過在應用生命週期的早期階段與數據庫交互來隱藏它,例如,通過在啓動時讀取/寫入虛擬值。

我可以想象的時間的主要的其他地方將在解析的JSON。但是你的對象結構看起來很小,所以在這裏看起來不太可能。

在任務完成前轉換通常是安全的。如果數據被服務器端安全規則拒絕,則isCancelled()將僅爲真。既然您控制了代碼和安全規則,那麼通常不會在生產中發生。但我不確定客戶何時會返回trueIsFaulted()。該調用並不存在於底層的iOS和Android SDK中,因此我不知道Unity客戶端何時引發這種情況。

+0

非常感謝你弗蘭克!非常非常有價值的信息。我試圖創建一個獨立的方法來創建數據庫中的虛擬數據,第一個方法很慢,正如您所提到的,但之後,數據立即被存儲! 有一點可以想到:這應該*真正*包含在SDK指南中:-)老實說,我很接近尋找Firebase的替代品,只是因爲這個簡單的誤解。 無論如何:再次感謝你。剛剛救了我一天:-) –

+0

很高興聽到這是最初的連接。大多數使用Firebase的應用程序類型,從開始的那一刻開始使用它。因此創建連接的成本既隱藏在一般啓動成本中,也不能在這種情況下進一步隱藏。在你的系統中,似乎你稍後才使用數據庫,在這種情況下,有辦法隱藏成本。但這確實是我們通用的文檔方法可能沒有幫助的情況之一。 –