RxJS:使用定时间隔对大数组进行块化并将其用于渲染

时间:2016-06-10 03:08:33

标签: javascript rxjs

有一个大数组,比如长度为100.每个数组包含一个包含50多个项目的子数组。 (2-D阵列的种类)

一次渲染所有内容非常耗时,可能需要更多的浏览器内存。决定继续将数据集分块为5并渲染它们。也就是说,数据渲染的块然后获取下一个块并渲染它。基于1秒的间隔。

如何在RxJS中实现这一目标?

尝试:

Rx.Observable.range(0, 10).map(i => data[i]).subscribe(...)

这需要前10条记录。所以我编写了一个递归函数,将10更改为迭代器+10,但渲染数组项需要花费大量时间。尝试使用:

Rx.Observable.interval(0, 500).take(data.length).map(i => data[i]).subscribe(...)

这很好用。但是每500ms时间空间需要1次渲染。我想第一和第二俱乐部。 10块使用500毫秒渲染并获取下一个块。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用buffer来对数组进行分块。这假设process函数是同步的。

Rx.Observable.from(bigArray)
  .bufferWithCount(chunkSize)
  .do(process(chunk))

那就是说,如果process函数是同步的,为什么要使用Rxjs呢?将数组拆分为块(参见Split array into chunks有关如何执行此操作)并在每个块上执行process函数。它可能更快,占用更少的内存。