向大约 15 个 firebase 对象添加值/子事件会导致堆大小增加吗?

Posted

技术标签:

【中文标题】向大约 15 个 firebase 对象添加值/子事件会导致堆大小增加吗?【英文标题】:Do adding value/Child events to a around 15 firebase objects cause heap size increments? 【发布时间】:2014-08-24 20:23:45 【问题描述】:

我正在开发一个应用程序,我需要在他登录时加载所有用户数据。

所以我正在使用值和子事件侦听器侦听多个 firebase 引用,并更新我的应用程序中的本地数据库。

最近我注意到,当我使用 15 个或更多的侦听器(大约)时,我在等待 valueEvents 和 ChildEvents 时在 logcat 中收到堆大小增长警报。

这里有人发生过吗?我不确定我的代码是否没有响应或没有正确使用 firebase。也许是 firebase API 中存在错误。

当我评论将侦听器分配给引用的行时,它工作得很好。

我还将所有这些侦听器保存在一个列表中,以便在完成后删除它们。

【问题讨论】:

【参考方案1】:

监听器本身的添加成本相对较低,不会导致显着的堆增长。但是,由于添加侦听器而被下拉到设备的数据可能很大并且会触发堆增长警告。

Firebase SDK 将使用与侦听器返回的数据量成比例的内存。因此,如果您的侦听器正在拉下一个大对象,它将使用更多内存。小物件会使用更少。

要尝试的一件事是通过 curl 获取相同的数据(尝试在 Firebase ref 上使用 .toString() 以获取 URL)并查看返回了多少数据。如果它大大超出您的预期,您可能需要调整您的数据布局或您正在使用的查询。

【讨论】:

感谢您的回答,每个附加的听众拉大约 10kb,这听起来并不多。还有其他可能导致这种行为的已知问题吗? 没有导致此问题的已知问题。由于 SDK 保留内部缓存,因此存储 Firebase 数据会产生一些开销。如果删除侦听器,垃圾回收后堆是否会恢复到预期大小? 删除它们没有帮助,问题是我尝试加载 2MB 的数据,删除一些不必要的数据后一切正常,堆没有增长。 酷。很高兴听到它。

以上是关于向大约 15 个 firebase 对象添加值/子事件会导致堆大小增加吗?的主要内容,如果未能解决你的问题,请参考以下文章

添加Firebase Firestore对象进行本机反应

向 Firebase 添加对象时设置自己的密钥 - AngularFire

Firebase:设置其他用户属性

如何在不覆盖的情况下向 Firebase Firestore 添加值?

Firebase 函数接收对象而不是字符串

Vue从入门到实战5_学习