2015-03-03 61 views
0
var url = 'reports?type=travel&sttime=22/01/2015&endtime=2/03/2015' 
$.get(url).done(function(response){console.log(response);}); 

這是我的代碼,用於在22/01/2015和2/03/2015之間獲取報告數據。在javascript中實現多線程

由於時間跨度爲40天,響應將包含大量數據,並且需要超過1分鐘才能獲取數據。

我現在的問題是,我是跳水40/10 = 4 即1月22日至2月1日,2月2日至2月11日,2月12日至2月21日,21 Feb- 03月02日

我的日期根據日期分區創建四個URL .. 有沒有什麼辦法做多線程來實現所有的url一次打到 數據,並獲取響應..以減少瀏覽器中的顯示時間。

+0

JavaScript是單線程的。有Webworkers,如果你想看看。 – elclanrs 2015-03-03 08:55:05

回答

1

這沒關係。這裏的瓶頸可能不是I/O,而是網絡速度。如果您的客戶端網絡只能從您的服務器傳輸N kB/s到他的機器,則打開2或4或10個併發連接無關緊要。

一個更好的解決方案是分頁數據,只獲取客戶端當前需要的部分。我懷疑任何用戶都可以閱讀與整整兩個月有關的大量數據。只抓取客戶可能感興趣的部分,也可以下載第2頁和第3頁,然後在後臺下載其餘部分。

0

不,沒有。 JavaScript不支持多線程,因爲瀏覽器本身的JavaScript解釋器是單線程的。

0

您不需要多線程來執行多個請求。該請求是異步的,所以你可以打的電話後對方,他們將在同一時間啓動:當響應到達

$.get(url1).done(function(response){console.log(1, response);}); 
$.get(url2).done(function(response){console.log(2, response);}); 
$.get(url3).done(function(response){console.log(3, response);}); 
$.get(url4).done(function(response){console.log(4, response);}); 

done回調爲每個請求將被調用。

這是否會加速負載取決於瓶頸在哪裏。

可以使用when method等待所有請求完成:

$.when(
    $.get(url1), 
    $.get(url2), 
    $.get(url3), 
    $.get(url4) 
).done(function(d1, d2, d3, d4){ 
    var result = d1.concat(d2, d3, d4); 
    // ... 
}); 
+0

我想將所有響應合併到一個數組中,並將其呈現到UI中。我如何能夠檢查是否全部完成併合併到全局數組中 – 2015-03-04 18:54:53

+0

@prudviraju:您可以使用'when'方法。我在上面添加了一個例子。 – Guffa 2015-03-04 19:18:52

+0

我可以得到一些更清晰的,在這裏我caontaining一個URLS數組,我想捕捉到的結果數組響應..動態像這樣[$ .get(url1), $ .get(url2), $ .get(url3), $ .get(url4),...... ,,。,。,$ .get(urln)],我想捕獲每個URL響應..請指導這個 – 2015-03-06 11:03:07

0

我建議你使用HTML5的Web工作者。

http://www.w3schools.com/html/html5_webworkers.asp

這是爲這些類型的應用程序的唯一方法,但遺憾的是並不是所有的瀏覽器都支持他們。所以你應該留意你想建議的瀏覽器和版本。

也用於改進UI。您可以在客戶端使用脫機存儲。

http://www.w3schools.com/html/html5_webstorage.asp

例子:我有20 feb.So 2月1日之間的數據,當用戶首次加載網站,我獲取所有數據,並存儲在客戶端side.Now再次當用戶打開網站22日feb,這次我只能在20 feb和22nd feb之間獲取數據,然後再將其存儲在客戶端。所以只有在第一時間這需要時間,並且從第二次開始,它會改善用戶交互並且更高效。現代的大多數基於html5的網站顯示見解將以類似的方式工作。