我制作了一个空白的全新Cordova应用程序(-v 6.3.1),并为iOS打造。该应用程序除了以下内容外什么都不做:
var ref = new Firebase('url-to-firebase-leaf-node-with-4000-children');
ref.on("child_added", function(child, prev) {
console.log("here");
});
部署到iPhone。该应用程序崩溃了,Xcode引用了以下内容:
WebThread (7): EXC_BAD_ACCESS (code=1, address=0xbbadbeef)
内的 bmalloc::VMHeap::grow()
。
如果我这样做:
var ref = new Firebase('url-to-firebase-leaf-node-with-100-children');
然后该应用不会崩溃。
这显然是一个记忆问题,但如何解决呢?从4,000个子节点中下载了1.5Mb的数据,我无法想象这应该耗尽所有可用内存。请避免不提取所有数据的建议 - 应用程序需要所有数据并在Android上正常运行。
答案 0 :(得分:2)
本机崩溃非常具有表现力。应用程序内存不足。
Firebase SDK使用您的订阅构建数据库的内存镜像。即使您的child_added
回调没有对子快照执行任何操作,此内部树也会使用内存来显示节点下的所有数据。
因此,如果数据库适合您的域模型,您应该考虑对订阅使用限制,引入分页,甚至重构数据库。
答案 1 :(得分:0)
在添加child_added
侦听器之前,请确保已缓存所有数据(通过上述分页技术或其他方式)。