反应,和/终极版获取和过滤数据
比方说,比如我有一个项目一个巨大的列表,可以称之为contacts
这是我们有一大堆的过滤器,如contact type
,contact location
,assigned to
,filter ASC,
过滤DESC`列表1000+项目。用户可以输入他们想要的任何内容。了Redux存储由触头中的归一化对象反应,和/终极版获取和过滤数据
{
"1": {
"name": "Home Simpson",
"type": "Lead",
"location": "California",
"created_at": "01/01/16"
},
"2": {
"name": "Ned Flanders",
"type": "Client",
"location": "SpringField",
"created_at": "05/01/16"
},
[...1000+]
}
获取的所有联系人的是能够更好地映射和过滤过的所有基于关闭所述用户输入的关于所述客户端侧的触点的后?
或者我们是否应该向服务器发出另一个请求以获取与特定过滤器相关的所有联系人?
请注意,它不只是一个参数,可以查询它是多个参数。因此contact.type ===:“Lead”|| “Client”和contact.location ===“Spring Field”
什么是这种大小的查询的最佳做法,并且正在为所有匹配的联系人提供额外请求的服务器的访问,还是更好地过滤我们的REDX商店客户端,而不是把负载放在服务器上?
在Redux方面:随意做这个客户端。这种过滤速度非常快,Redux不会减慢速度。
一般来说,这是一种你不想优化的东西,除非你真的知道它会成为一个问题。当你在谈论也许有人在数据集设置过多的时候出现了这样的情况,这是一个非常不成熟的优化 - 可能有好几十件事情可以让你更好地工作而不是这个。对于你所知道的,有效载荷的大小可能会比这个大得多(联系对象有多大?)
但是没有必要去听任何人的话。在目标设备上生成数据集(典型用户将使用什么?最差情况?),并执行过滤样本数据的性能基准测试。我有一种感觉,你会发现你所做的这种过滤不会成为瓶颈,因为它只是O(n * 1)。您正在通过n个元素O(n)进行筛选,检查每个O(1)上的单个值。另一方面,如果你有一个非常复杂的对象列表和一个非常复杂的过滤器,你的结果可能会改变。例如,如果您正在查找所有知道所有其他联系人的人都知道相同的三个特定人员的联系人,则复杂性会升高,并且您很可能会遇到瓶颈。
无论如何,我真的建议您在花费大量时间过早优化您的应用程序之前尝试进行基准测试。
感谢弥敦道我认为你是对的过早的优化,我只是想第一次走正确的道路,而不是重构。对象不是很大,它可能会导致20个属性顶部的问题,过滤器基本上是在联系人的属性查找。感谢您的建议,我一定会设立一个基准,并看看它是如何发展的! – Enjayy
IMO,正确的地方过滤器数据不是直接在减速器中,而是在选择器。
从终极版文档:
重新选择是创建memoized,可组合的选择器功能的简单的库。重新选择选择器可用于有效地计算来自Redux商店的派生数据。
我目前使用选择器来筛选和排序数据。
- 该州没有数据重复。您不必存储通过一种特定方式过滤的项目的副本。
- 可以在不同的组件中使用相同的数据,每个组件都使用不同的选择器函数进行过滤。
- 您可以组合使用应用程序中已有的选择器应用许多数据计算的选择器。
- 如果你做对了,你的选择器将是纯粹的功能,那么你可以很容易地测试它们。
- 在许多组件中使用相同的选择器。
我必须说1000+项目绝不算大。在客户端请求和过滤是非常好的。 (除非你的目标是低功耗的设备) – luanped
@luanped是的我想的是同样的事情,但问题是一些“用户”可能有更多的联系人说万有取决于用户我希望平均数是一千随着时间的推移,它将继续增长并不断增长。 – Enjayy