2016-02-04 63 views
0

假设我有大量的数据需要处理。为了这个例子,假设数据不能在服务器端处理;它必须在客户端进行处理。我们也可以说,整个数据处理是这样的:编写非阻塞DOM功能

for element in data do: 
    //do some work with "element" 
end 

再次,对于这个例子的目的,让我们说,data包含100.000元素。

调用过程函数会冻结整个DOM,直到循环结束。我的问题是:有没有办法以非阻塞的方式进行这种处理?是某种异步/等待,处理data的块,某种类型的yield机制,还是几乎所有的东西?

编辑:Web工人不是一个选项,因为我需要至少IE 11的支持。

编辑2:似乎我在混合“网络工作者”与“共享网络工作者”。问题得到解答。

+6

您是否为此调查过WebWorkers? https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers – johnnyutah

+0

@johnnyutah - 他们将无法访问DOM。 – Quentin

+0

@Quentin所以呢? ........ – zerkms

回答

1

您可以每次循环给定数量的元素,处理下一个堆栈中的下一批。要做到这一点,你必须使用setTimeout。这是很基本的,但.. 也许使用减少或东西..发送其余下一个堆栈等等..在任何浏览器的工作原理

这篇文章可以帮助https://benjaminhorn.io/code/part-2-cpu-intensive-javascript-computations-without-blocking-the-single-thread/

这只能算是如果你不能依靠网络工作者,这是正确的答案,因为这是他们所指定的。