API/应用程序设计:用新数组替换非常大的数组或修改现有数组
API/Application Design: Replace with very large array with a new array or modify the existing array
我有一个非常大的对象数组(嵌套对象)。
var array = [
{ a: "a", b: { .. }, c:"c", ... },
{...}
]
经过一些API调用后,我得到一个全新的数组,其中有一个修改过的元素,并且我确切地知道哪个元素被修改了。
是一个好主意(在内存使用和性能方面)分配
array
与新的值或只替换修改的对象。我是否需要修改API,只发送修改后的对象并相应地更新数组?
API是由另一个团队开发的,它在每个请求上传输大量数据。我需要一个可靠的技术答案来说服他们改变API,只发送所需的数据,并在客户端进行修改。
If by
"我知道哪个元素被修改了"
你的意思是你知道修改元素的确切位置,然后替换它是一个O(1)
操作:
array[positionOfModified] = modified;
否则,您将不得不找到元素,这通常是O(N)
操作,除非您在数组排序(O(logN)
)时执行类似二进制搜索的操作。
因此,就速度而言,替换被修改的对象可能比仅仅替换数组引用要慢:
array = newArray;
然而,空间(内存)的改进可能比可能的速度回归要大得多。
只返回修改过的元素会减少你的带宽,因为你将发送单个对象而不是一个大数组。如果这个请求频繁发生(许多用户多次请求,可能同时请求),那么每次都返回整个数组,就有可能导致网络拥塞。
应用程序的内存使用也将得到改善,因为您将覆盖单个对象而不是数组,因此垃圾收集器将只需要担心清理修改过的对象,而不是之前的整个数组。替换大型数组的引用,特别是如果这种替换经常进行(可能比GC的清理周期更快),可能会相当快地耗尽您的内存。
理想情况下,你可以做的是发送修改后的对象和它在数组中的位置,如:
{
element: { ... }
position: ...
}
这将允许您使用较小的内存/带宽,同时保持更新过程的恒定操作。
array[response.position] = response.element;
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 面对非常糟糕的 angular.copy 用于大型数组的性能
- 如何从图像数组创建一个非常简单的jquery幻灯片
- API/应用程序设计:用新数组替换非常大的数组或修改现有数组
- 处理非常大的Javascript数组或对象
- Algo在一个非常大的数组中查找重复项
- 旋转数组并返回最大的数字,不适用于非常大的数字
- 为什么javascript数组具有非常高的索引数会导致崩溃/变慢/麻烦
- 如何在js中处理一个非常大的数组
- 循环返回非常长的数组,即使它循环了3次
- 在JavsScript中删除关联数组中的元素——>非常缓慢