我在React Native中有客户端应用程序。此应用使用服务器REST API。
这是来自API的数据示例:
组:
[
{
"id":1,
"name":"example1",
"items":[
{
"id":1,
"name":"example1",
"example":123
},
{
"id":2,
"name":"example1",
"example":123
}
]
},
{
"id":2,
"name":"example1",
"items":[
{
"id":3,
"name":"example1",
"example":123
},
{
"id":4,
"name":"example1",
"example":123
}
]
}
]
我将这些数据保存到Redux存储中,以便以后可以访问它们。
我需要使用此数据执行许多操作,例如:deleteGroup
,findGroup
,deleteItem
,findItem
,...
所有这些操作都是按ID进行的。
我的问题是,通过ID搜索值的最快方法是什么。
我看到3个选项:
array.findIndex(i => i.id == 3)
array.findIndex
比用id键将数组转换成对象快吗?
还有另一种方法可以实现相同但更快吗?
答案 0 :(得分:1)
哪个更快?
这要看情况,所以我无法回答。但是you can。
点击该链接,阅读该文章。我只是想为这个确切的案例添加一些注意事项。四个问题:
A)“对象的对象”或“对象的数组”是否更短以JSON表示(因此更快地传输到客户端)?请记住,许多客户的带宽非常有限,因此加载时间是一项功能。如果加载速度更快,更多的人可以使用它。
B)您可以在不同的客户端之间共享该计算结果吗?在这种情况下,将计算移至服务器可能更有意义(如果这与A冲突不大)。
C)您实际上经常 在一页加载时通过id查找对象吗?将数组转换为查找结构通常是O(n),但是比较重(分配内存,计算哈希),而搜索速度也很快(O(n))。映射查找为O(1),因此查找次数越多,查找结构更有效率的可能性就越大。而且,您拥有的元素越多,与搜索相比,查找的效率就越高。遍历10个元素可能比计算散列并查找散列要快,因此对于小型数据集,散列表可能永远没有更高的效率。
lookupEfficiency = timeToBuildTable * n + numberOfLookups * lookupCost * 1;
arrayEfficiency = numberOfLookups * n * searchCost;
D)您是否有未使用的服务器资源(您是否按实例或使用量付费)?如果是,则将计算移至服务器上无需花费 ,否则,您应考虑将计算移至客户端,因为客户端是免费的。另外:哪一个更快?普通客户还是您的服务器?
如您所见,对于“哪个更快?”没有明确的答案。也不是“哪个更好?”。问问自己上面的问题,获取一些数据(测试它!),然后做出决定。