客户端JavaScript中多个Firebase连接的资源限制

时间:2013-09-20 15:43:52

标签: javascript web-applications firebase

让我们说我想制作一个完全在浏览器中运行的大型,实时,2d开放世界风格的游戏,我想使用Firebase来实现它。

让我们不谈有关安全的问题;我稍后会问这些。 (=

玩家从(0,0)开始,可以向任何方向移动。我在空间上对世界进行散列,以便任何给定的x,y坐标成为我可用于生成Firebase ref的单个(或嵌套)键:

var getKey = function(x, y) {
  return Math.floor(x / 100) + ':' + Math.floor(y / 100);
}

var key = getKey(currX, currY);

var ref = new Firebase('https://whatever.firebaseio.com/world/' + key);
// ...

这样的事情。当玩家在世界各地移动时,我非常确定我需要在Firebase中保留4到9个参考值才能获得更改。这可能会增加一倍或三倍,具体取决于我如何构建数据:其他玩家是否存储在world/树或其他地方?那种事。

我不希望播放器的浏览器获得它不关心的更新。我希望"到期"当玩家四处移动时,旧的参考资料因此浏览器不会花费资源聊聊世界上遥远的切片。

是否足以让ref实例超出范围并获得GCed?或者我还需要做些什么来通知裁判我不想再使用它了吗?

我想到的另一件事并不是担心有多少引用,而是跟踪on回调。当玩家离开世界特定区域的范围时,我可以off我设置的任何回调。这足以让我的裁判停止与Firebase交谈吗?

1 个答案:

答案 0 :(得分:7)

Firebase仅保留一个打开的连接(使用网络套接字)来处理与单个Firebase实例的通信,即使您为其创建多个引用也是如此。就像你说的那样 - 只要你'关闭'非活动裁判上的任何事件,你应该是好的。

您可能希望考虑在开发期间启用Firebase调试日志记录。它将让您看到浏览器与其服务器之间发生的所有通信。这样,您将能够验证客户端是否只获得必要的更新。要启用调试日志记录,请在创建第一个Firebase ref之前的任何位置添加以下行:

Firebase.enableLogging(true);