我在 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 个选项:
- 在后端将对象数组转换为对象的对象,然后使用对象[id]访问项目(后端重)里>
- 在客户端将对象数组转换为对象的对象,然后使用对象[id]访问项目(主要在客户端)里>
- 使用
array.findIndex(i => i.id == 3)
在客户端
是array.findIndex
比使用 id 键将数组转换为对象更快吗?
还有另一种选择如何实现相同但更快的效果吗?
最佳答案
Which one is faster?
这要看情况,所以我无法回答。但是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) 您是否有未使用的服务器资源(您是按实例付费还是基于使用情况付费)?如果是,则将计算转移到服务器没有成本,否则您应该考虑将这些转移到客户端,因为客户端是免费的。另:哪一个更快?普通客户端还是您的服务器?
正如您所看到的,对于“哪个更快?”并没有明确的答案。也不是“哪个更好?”。问自己上述问题,获取一些数据(测试一下!),然后做出决定。
关于javascript - 哪一个更快? `array.findIndex` 与 `array.reduce` + `object[index]`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397535/