gpt4 book ai didi

firebase - 按时间优先顺序对 Firebase 子项进行分页

转载 作者:行者123 更新时间:2023-12-02 08:02:25 26 4
gpt4 key购买 nike

tl;dr 通过 startAtendAtlimit 在 Firebase 中执行基本分页非常复杂,一定是一个更简单的方法。

我正在为大量用户提交构建一个管理界面。我最初(和当前)的想法是简单地获取所有内容并在客户端上执行分页。然而,当获取 2000 多条记录(每条记录包含 5-6 个小数字/字符串字段)时,会出现明显的延迟,我将其归因于超过 1.5mb 的数据负载。

目前所有条目都是通过 push 添加的但我对如何在巨大的列表中分页有点迷失。

为了获取我正在使用的第一页数据endAtlimit共 5 条:

ref.endAt().limit(10).on('child_added', function(snapshot) {
console.log(snapshot.name(), snapshot.val().name)
})

结果如下:

-IlNo79stfiYZ61fFkx3 #46 John
-IlNo7AmMk0iXp98oKh5 #47 Robert
-IlNo7BeDXbEe7rB6IQ3 #48 Andrew
-IlNo7CX-WzM0caCS0Xp #49 Frank
-IlNo7DNA0SzEe8Sua16 #50 Jimmmy

首先,为了弄清楚有多少页,我保留了一个单独的计数器,每当有人添加或删除记录时,该计数器就会更新。

其次,由于我使用 push 我无法导航到特定页面,因为我不知道特定页面的最后一条记录的名称,这意味着这样的界面不是目前可能:

Standard pagination controls

为了更简单,我决定只使用下一个/上一个按钮,但这也带来了一个新问题;如果我使用上一个结果集中第一条记录的名称,我可以使用以下内容分页到下一页:

ref.endAt(null, '-IlNo79stfiYZ61fFkx3').limit(5).on('child_added', function(snapshot) {
console.log(snapshot.name(), snapshot.val().name)
})

该操作的结果如下:

-IlNo76KDsN53rB1xb-K #42 William
-IlNo77CtgQvjuonF2nH #43 Christian
-IlNo7857XWfMipCa8bv #44 Jim
-IlNo78z11Bkj-XJjbg_ #45 Richard
-IlNo79stfiYZ61fFkx3 #46 John

现在我有了下一页,只是它移动了一个位置,这意味着我必须调整我的限制并忽略最后一条记录。

要后退一页,我必须在客户端上保留迄今为止收到的每条记录的单独列表,并找出要传递给 startAt 的名称。

是否有更简单的方法来执行此操作,或者我应该返回获取所有内容?

最佳答案

我们正在努力添加“offset()”查询以方便分页。我们还将添加一个特殊的端点,以允许您读取某个位置的子项数量,而无需实际从服务器加载它们。

但这两个都需要一些时间。与此同时,您描述的方法(或在客户端上完成这一切)可能是您最好的选择。

如果您有一个仅追加的数据结构,则在写入数据时也可能会进行分页。例如:将前 50 个放入/page1,将第二个 50 放入/page2,等等

关于firebase - 按时间优先顺序对 Firebase 子项进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com