2016-02-04 130 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/

這隻能算是如果你不能依靠網絡工作者,這是正確的答案,因爲這是他們所指定的。