在我的网站上,我有许多包含数据的数组。例如:顶点数组、颜色数组、大小数组...
我正在处理大量的项目,高达数千万。
在将数据添加到数组之前,我需要对其进行处理。迄今为止,我是在主线程中完成的,这使得我的网站冻结了X秒。它因处理和将处理后的数据添加到数组而冻结。
今天,我将处理工作移到了Web Workers中,但处理后的数据仍然是在主线程中添加的。我设法节省了处理时间,但没有减少添加时间。
添加操作只需使用
我阅读了一些关于数组工作原理的文章,并发现当我们向数组添加项时,会将数组完全复制到内存中的新位置,并增加
我还了解到,类型化数组要快得多。但是,为此我需要知道数组的大小,而我不知道,而且为了创建一个带有额外计数器的大型类型化数组并管理在数组中间(而不是在数组末尾)添加项,需要改变很多代码,这些我现在不想做。
所以,对于我的问题,我有从Web Workers返回的TypedArray,我需要将其放入常规数组中。最佳的性能方式是什么?(今天我正在循环运行并一个一个地推送)
编辑
网站工作示例: 客户端添加项目计数,假设是100000个。 收集项目原始数据并发送到worker。 worker处理所有信息并将处理后的数据作为类型化数组发送回来(用作可传输对象)。在主线程中,我们将处理后的数据添加到数组中-放置在末尾或某个特定索引中。 第二轮。客户端再次添加100000个项目。发送到worker并将结果添加到主线程数组中。 第3轮可能是10个项目,第4轮是10000个项目,第5轮可以删除索引10-2000,...
我正在处理大量的项目,高达数千万。
在将数据添加到数组之前,我需要对其进行处理。迄今为止,我是在主线程中完成的,这使得我的网站冻结了X秒。它因处理和将处理后的数据添加到数组而冻结。
今天,我将处理工作移到了Web Workers中,但处理后的数据仍然是在主线程中添加的。我设法节省了处理时间,但没有减少添加时间。
添加操作只需使用
array.push()
或array.splice()
即可完成。我阅读了一些关于数组工作原理的文章,并发现当我们向数组添加项时,会将数组完全复制到内存中的新位置,并增加
array.length + 1
的大小,然后再添加值。这使得我的数据推送变慢。我还了解到,类型化数组要快得多。但是,为此我需要知道数组的大小,而我不知道,而且为了创建一个带有额外计数器的大型类型化数组并管理在数组中间(而不是在数组末尾)添加项,需要改变很多代码,这些我现在不想做。
所以,对于我的问题,我有从Web Workers返回的TypedArray,我需要将其放入常规数组中。最佳的性能方式是什么?(今天我正在循环运行并一个一个地推送)
编辑
网站工作示例: 客户端添加项目计数,假设是100000个。 收集项目原始数据并发送到worker。 worker处理所有信息并将处理后的数据作为类型化数组发送回来(用作可传输对象)。在主线程中,我们将处理后的数据添加到数组中-放置在末尾或某个特定索引中。 第二轮。客户端再次添加100000个项目。发送到worker并将结果添加到主线程数组中。 第3轮可能是10个项目,第4轮是10000个项目,第5轮可以删除索引10-2000,...
Array#slice
复制它。 - Pavlotyteen4a03
,不幸的是,客户正在上传大量数据,他不希望主线程冻结。 - Raziza O