有一个大数组,比如长度为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毫秒渲染并获取下一个块。
答案 0 :(得分:2)
您可以尝试使用buffer
来对数组进行分块。这假设process
函数是同步的。
Rx.Observable.from(bigArray)
.bufferWithCount(chunkSize)
.do(process(chunk))
那就是说,如果process
函数是同步的,为什么要使用Rxjs呢?将数组拆分为块(参见Split array into chunks有关如何执行此操作)并在每个块上执行process
函数。它可能更快,占用更少的内存。