2017-01-04 101 views
5

我想计算firebase中的消息大小,以便准确估计我的应用程序的成本。计算firebase消息大小

我注意到运行时实时数据库计算器显示的数据大小比预期的大。为了验证这一点,我启动了一个名为“测试”数据的单一裁判玩具应用:

{"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记录)。

UPDATE:

当前的带宽使用率高达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字节。

+2

如果您使用的是Chrome,您可以使用开发工具观察实际的websocket流量。你可能会觉得它很有用。 – cartant

+1

是的,我们有同样的问题:http://stackoverflow.com/questions/41471842/why-does-the-firebase-bandwidth-keep-increasing-for-no-reason?noredirect=1#comment70152399_41471842 – Coder1000

+1

同样的问题在这里以及:http://stackoverflow.com/questions/38959321/firebase-database-bandwidth-usage-growing-rapidly-even-when-when-the-database-is?rq=1 – shell

回答

3

我已经运行了一些更多的测试(读取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个字节存储)。

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

谢谢