【发布时间】:2020-01-14 19:24:29
【问题描述】:
我正在开发一个包含视频和文章提要的应用。我实现了滑动刷新布局。每当用户滑动它时,它都会从 Firebase 加载最后 5 个视频数据。
滑动刷新布局监听器 =>
mSwipeRefreshLayout.setOnRefreshListener(() -> {
manager.scrollToPosition(0);
refreshVideoFeed();
});
而 refreshVideoFeed 方法会触发这个 =>
Query query = myRef.orderByChild("videoDate").limitToLast(5);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
..................
它工作正常。但是,当我查看实时数据库仪表板时,我意识到应用程序正在使用大量数据(即使应用程序不在产品中)
然后我在 Android Studio 中打开 Profiler 看看发生了什么。我按孩子“videoDate”订购并获得了最后 5 个视频。刷新视频源需要 76 KB。
然后我再次按孩子“videoDate”订购并获得了最后 20 个视频。再次花费77KB!
另外,我为文章提要实现了相同的机制。我的实时数据库中有 236 篇文章。每当用户滑动时,它会加载 10 篇文章,花费 3.6 MB!
我想知道为什么会发生这种情况以及如何避免这种情况。似乎 Firebase SDK 将所有视频提取到客户端,然后过滤它们。但我只想获取我指定的特定范围的数据。
【问题讨论】:
-
在您的安全规则中,您是否在
videoDate上使用了define an index?否则,myRef下的所有数据都将传输到客户端并在那里过滤。
标签: android firebase android-studio firebase-realtime-database