【发布时间】:2020-02-12 07:17:16
【问题描述】:
我在 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 个选项:
- 在后端将对象数组转换为对象对象,然后使用object[id]访问项目(后端很重)
- 在客户端将对象数组转换为对象对象,然后使用object[id]访问项目(客户端重)
- 在客户端使用
array.findIndex(i => i.id == 3)
array.findIndex 是否比使用 id 键将数组转换为对象更快?
是否有另一种选择如何实现相同但更快?
【问题讨论】:
-
您可以卸载到前端的任何处理都将减少服务器上的负载。在浏览器接收数据之前您可以进行的任何处理都可以加快页面的呈现速度……您的瓶颈在哪里?是否存在瓶颈或明显差异?
-
@Cerbrus 我现在不确定,因为没有足够的数据开始看到瓶颈,但它肯定会发生。我的问题更多是关于将数组转换为对象(大量预处理)或仅在数组上使用
findIndex并且没有预处理 -
如果您有大量的 id 访问,那么最快的方法是根本不使用数组,而是创建一个按 id 引用对象的字典。
-
@Baterka 没有解决性能问题的灵丹妙药。没有一种万能的解决方案。在对数据几乎一无所知的情况下,可能无法说出什么会更好。你最多有 10 个对象吗? 100? 10万?你打算做更多的查找还是更多的插入和删除?这些都会影响哪种解决方案更可取。
标签: javascript arrays object search indexof