- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
实现一个Android+Firebase应用,多对多关系:User <-> Widget(Widget可以共享给多个用户)。
注意事项:
实现抓取(连接式)的方法之一是遵循以下建议:https://www.firebase.com/docs/android/guide/structuring-data.html ("Joining Flattened Data
"):
// fetch a list of Mary's groups
ref.child("users/mchen/groups").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
// for each group, fetch the name and print it
String groupKey = snapshot.getKey();
ref.child("groups/" + groupKey + "/name").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println("Mary is a member of this group: " + snapshot.getValue());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
// ignore
}
});
}
});
这提出了一个问题,即拥有大量听众是否会对性能产生负面影响,或者是否会达到一些硬性限制。
但我们在文档中得到了保证:
Is it really okay to look up each record individually? Yes. The Firebase protocol uses web sockets, and the client libraries do a great deal of internal optimization of incoming and outgoing requests. Until we get into tens of thousands of records, this approach is perfectly reasonable. In fact, the time required to download the data (i.e. the byte count) eclipses any other concerns regarding connection overhead.
但是,可以肯定的是,我制作了一个比较 2 种方法的小测试应用程序:
ValueEventListener
-s 一个接一个地添加到所有小部件(根据上面提到的 Firebase 的“结构化数据”指南)ChildEventListener
到托管所有小部件的节点(需要在一个节点下充分构建用户的小部件)在 4 种不同的设备和 Android 版本 (4.x - 5.x) 上进行了测试。 Firebase 库:'com.firebase:firebase-client-android:2.3.1'
.
在第一种方法中,性能相当令人失望。我一直看到大约 15-100 个事件/秒。最低的性能,~15 个事件/秒经常出现,所以看起来应该认真对待。在这种情况下,如果用户有 100 个小部件,则需要大约 6 秒的时间来获取有关所有小部件的信息(例如滚动列表)。这太慢了。对于 1000 个 Widget,通常需要多达 40 秒才能由不同的监听器获取它们的信息。太慢了。
在第二种方法中,我观察到 200-3000 个事件/秒。因此比第一种方法快 15-30 倍!
所以看起来像 Firebase 文档中的保证 [...] Until we get into tens of thousands of records, this approach is perfectly reasonable [...]
考虑到它的工作速度,它并不是很准确。
鉴于所有这些,我有 4 个相互关联的问题。
欢迎任何其他提示/考虑。TIA。
最佳答案
“这提出了一个问题,即拥有大量听众是否会对性能产生负面影响,或者是否会达到一些硬性限制。”
Firebase Realtime database
的答案与新的 Cloud Firestore database
相同。
无论您有多少连接或有多少监听器,重要的是您在客户端处理多少数据。
因此,如果您有 100 个监听器,监听 100 位的小数据,这将变得非常便宜,但如果这些监听器中的每一个都在监听不断变化的数据流,那么对于客户端来说,这将变得非常昂贵处理得很快。
而且由于移动设备非常不同,所以很难知道多少是太多。因此,如果您针对的是倾向于拥有非常高端手机的美国用户,那么如果我们针对的是手机性能低得多的国家/地区,那将是一个不同的限制。
因此,如果您根据 Activity 的生命周期相应地删除它们,那么您可以拥有任意数量的监听器,如前所述 here .
还有另一种方法,使用 addListenerForSingleValueEvent
。在这种情况下,无需删除监听器。
关于android - Firebase Android : slow "join" using many listeners, 似乎与文档相矛盾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35996865/
现在我正在尝试实现 flash programming specification对于 PIC32MX。我正在使用 PIC32MX512L 和 PIC32MX512H。 PIC32MX512L最终必须
我是一名优秀的程序员,十分优秀!