javascript - 计算 firebase 消息大小

标签 javascript firebase firebase-realtime-database

我正在尝试计算 Firebase 中消息的大小,以便准确估算我的应用的成本。

我在运行时注意到实时数据库计算器显示的数据量大于预期。为了验证这一点,我启动了一个玩具应用程序,它有一个名为“test”的引用和数据:

{"foo": "bar"}

继续其他答案,我估计这个数据小于 20 字节。

使用此代码检索数据:

firebase.database().ref("test").once("value", function(snapshot) {
  console.log(snapshot.val());
});

这是一个jsfiddle showing this toy example .

我获取 ref 和 console.log 数据。我访问过这个例子不到 10 次。当我查看玩具应用程序的实时数据库使用情况选项卡时,它显示大约使用了 30KB 带宽。

还发送了哪些其他数据来解决预期数据使用量(10 * 20 字节 = 200 字节)与实际发送的 30KB 之间的巨大差距?

初始化应用时是否有一些初始开销会增加数据使用量?

编辑:

按照 cartant 的建议,我记录了从 websocket 发送的帧。这是我发现的(在此之前我看到一些大约 200 字节的初始化消息):

     Data                                                        Length    
     {"t":"d","d":{"r":22,"a":"q","b":{"p":"/test","h":""}}}     55 
     {"t":"d","d":{"b":{"p":"test","d":{"foo":"bar"}},"a":"d"}}  58 
     {"t":"d","d":{"r":23,"a":"n","b":{"p":"/test"}}}            48 
     {"t":"d","d":{"r":22,"b":{"s":"ok","d":{}}}}                44 
     {"t":"d","d":{"r":23,"b":{"s":"ok","d":""}}}                44

所以似乎任何消息都有大约 200-250 字节的开销。谁能证实这一点?这仍然不能完全解释我之前提到的差距(10 条消息 * 250 字节 = 2.5 KB 与记录的 30 KB)。

更新:

当前带宽使用量高达 155 KB。我不确定这篇文章有 35 位观众时这个数字怎么可能。为了尝试了解这一点(我仍然不确定带宽的实际计算方式),以下是我的想法:

200 bytes to initialize/connect
220 bytes per message (200 bytes of overhead + 20 bytes in message)
100 times sent (this is probably an overestimate, as there are 35 views on this post, but I have viewed it around 10 times myself)

(200 bytes + 220 bytes) * 100 views = 42000 bytes or 42 KB. 

因此,要达到 155 KB,要么发送了 100 多次,要么存在一些无法解释的开销。此外,我假设(我不知道)初始化的开销是 200 字节,发送任何消息的开销是 200 字节。

最佳答案

我已经运行了更多测试(读取 22 个字节)并认为在计算带宽时可能存在错误。如果不是,则重新加载时的带宽速率非常大。这是我的测试:

Test 1 (600 requests of 22 bytes with only one initial connect to the page)

83 KB total for 600 requests
83 KB = 83,000 bytes / 600 requests = 138.33 bytes per request
data sent = 22 bytes
138.33 bytes - 22 bytes = 116.33 bytes overhead per message sent

这是合理且相当不错的(尽管这似乎没有在 firbase 的定价页面上考虑在内)。

我在等待一个半小时后运行了第二个测试,以便实时数据库使用情况可以更新。

测试 2 包含我认为可能是错误的内容:

Test 2 (20 page reloads sending one request) 

96 KB total for 20 page reloads + 20 requests
96 KB / 20 = 4.8 KB per reload

我不认为这是正确的,这使我相信实时数据库的数据使用部分存在错误。我注意到刷新时使用的数据会增加大约 2-4kb(我只存储了 22 个字节)。

我很确定这个用例很容易重现。我不会赞成这个,因为它不是真正的答案,它只是提出了更多问题,但这是我在运行这些测试用例时发现的。

谢谢

关于javascript - 计算 firebase 消息大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41457341/

相关文章:

javascript - Jquery 新日期 - 转换为 yyyy-MM-dd 并使用 toLocaleDateString

angularjs - 无法在 Controller 中使用 AngularFire 从 $firebaseObject 获取我的数据。查看/ng-repeat 工作正常

javascript - 如何映射和减少 Firebase List Observable 的子值

javascript - 数据更改时停止播放音频

ios - 如何删除 Firebase 观察者?

javascript - jQuery 中的函数不返回变量

javascript - 在没有jquery的情况下加载后更改dom元素的位置

javascript - 无法使用 .attr() 设置多个属性

java - 当我尝试将数据从 firebase 数据库添加到 firebaseViewHolder 时,Android 应用程序不断停止

firebase - 如何打印有意义的 firebase-dart 异常