【问题标题】:Unity Firebase SDK SetRawJsonValue performanceUnity Firebase SDK SetRawJsonValue 性能
【发布时间】:2017-07-02 19:35:07
【问题描述】:

我正在努力解决我的 Unity 2D 游戏的一个问题,我使用 Firebase 实时数据库来存储配置文件、命中、未命中、关卡进度等数据。

目前,我正在开发用户可以创建新个人资料/新角色的场景。我有以下代码工作:

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 的付费层是否会提高性能。

非常感谢任何帮助/提示!

提前致谢。

【问题讨论】:

    标签: c# firebase unity3d firebase-realtime-database


    【解决方案1】:

    firebaser 在这里

    将您的 Firebase 项目升级为付费方案不会产生性能差异。所有项目都在相同的基础架构上运行。

    如果这是您第一次与数据库交互,您将失去在客户端和服务器之间建立(Web 套接字)连接的大部分时间。之后,性能主要取决于您发送的数据量与您可用的带宽。这是两个最常见的原因,完全不受您的应用程序代码的控制。

    检查您是否在设置初始连接时浪费时间的一种快速方法是运行代码,这些代码会依次写入几次。如果下一次调用明显更快,则您需要支付建立初始连接的成本。您无法采取任何措施来防止这种成本,但您可以通过在应用程序生命周期的早期与数据库交互来隐藏它,例如通过在启动时读取/写入一个虚拟值。

    我可以想象的另一个主要地方是解析 JSON。但是您的对象结构似乎很小,因此在这里似乎不太可能。

    在任务完成之前转换通常是安全的。 isCancelled() 仅在数据被您的服务器端安全规则拒绝时才为真。由于您同时控制代码和安全规则,因此通常不会在生产中发生这种情况。但我不确定客户何时会为IsFaulted() 返回true。底层 iOS 和 Android SDK 中不存在该调用,因此我不知道 Unity 客户端何时引发此条件。

    【讨论】:

    • 非常感谢弗兰克!非常非常有价值的信息就在那里。我试图创建一个单独的方法来在数据库中创建虚拟数据,第一个方法很慢,正如你提到的,但在那之后,数据被立即存储了!想到一件事:这应该真的包含在 SDK 指南中 :-) 老实说,我正接近寻找 Firebase 的替代品,只是因为那个简单的误解。无论如何:再次感谢你。那只是节省了我的一天:-)
    • 很高兴听到这是初始连接。大多数使用 Firebase 的应用程序类型从一开始就使用它。因此,创建连接的成本既隐藏在一般启动成本中,也无法在这种情况下进一步隐藏。在您的系统中,您似乎直到稍后才使用数据库,在这种情况下,有一些方法可以隐藏成本。但这确实是我们的通用文档方法可能没有帮助的情况之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2020-11-27
    相关资源
    最近更新 更多