自从我浏览 thinkster.io angular+firebase 教程以来,这个问题一直困扰着我,我看到我的 firebase 分析选项卡显示并发峰值为 6,尽管我只记得打开了一页。我回顾了代码,并认为这可能与教程如何为您的 firebase 中的每个位置创建一个新的 Firebase(url) 有关。
我想测试创建新 Firebase(url) 与获取根引用然后访问 .child() 位置之间的区别。我的理论是 new Firebase(url) 每次都会创建一个新的连接,而 .child() 会重新使用现有的连接。
设置
- 创建了两个新的 Firebase,每个都有相同的数据
- 使用 yeoman 设置 angularjs 项目
- 包括角火
代码
为简单起见,我只是将所有内容放在生成代码的主控制器中。
为了测试使用 new Firebase() 创建的连接,我执行了以下操作:
$scope.fb_root = $firebase(new Firebase(FBURL_NEW));
$scope.fb_root_apps = $firebase(new Firebase(FBURL_NEW + '/apps'));
$scope.fb_root_someApp = $firebase(new Firebase(FBURL_NEW + '/apps/someApp'));
$scope.fb_root_users = $firebase(new Firebase(FBURL_NEW + '/users'));
$scope.fb_root_mike = $firebase(new Firebase(FBURL_NEW + '/users/mike'));
为了测试使用 ref.$child() 创建的连接,我执行了以下操作:
$scope.fb_child = $firebase(new Firebase(FBURL_CHILD));
$scope.fb_child_apps = $scope.fb_child.$child("apps");
$scope.fb_child_someApp = $scope.fb_child_apps.$child("someApp");
$scope.fb_child_users = $scope.fb_child.$child("users");
$scope.fb_child_mike = $scope.fb_child_users.$child("mike");
然后我将这些对象绑定到我的视图中以便我可以看到它们,然后我尝试通过我的 firebase forge 更新数据并在我的应用程序上实时观看数据更新。
结果
我将本地应用程序打开为 17 个浏览器选项卡,希望大量选项卡会夸大连接方法之间的任何差异。
我发现每个选项卡只为每个 firebase 数据库打开了一个返回到 firebase 的 Web 套接字连接。因此,在测试结束时,两种方法都产生了相同的 17 个连接的峰值。
结论
从这个简单的测试来看,我认为 Firebase JS 库在管理其连接方面做得很好。
无论您的代码多次调用 new Firebase(),还是通过 .child() 引用子位置,就您的计量而言,该库只会创建一个连接。只要您的应用处于打开状态,该连接就会一直在线。
所以在您的示例中 - 是的,我相信您会看到 6 个并发连接,1 个用于有人发送消息的应用,5 个用于接收消息的应用。
更新
另一件值得一提的事情是,Firebase 根据当月 95% 的使用率来衡量付费计划的连接。这列在他们定价页面的常见问题解答部分@https://www.firebase.com/pricing.html
2016 年 3 月 11 日更新:Firebase 似乎不再根据 95% 来衡量连接。相反,第 101 个并发连接被拒绝。
https://www.firebase.com/pricing.html:
我们所有的计划都对数据库连接数有硬性限制。
我们的 Free 和 Spark 计划限制为 100 个。限制不能
提高。所有其他计划的数据库数量限制为 10,000
连接。这可以删除以永久允许无限
如果您通过 firebase-support@google.com 向我们发送电子邮件,则可以连接。
我们施加此礼貌限制的原因是为了防止滥用并确保
我们准备好处理我们最大的客户。请联系
我们至少提前 24 小时,以便我们可以取消此限制并确保
我们有足够的容量满足您的需求。