2015-03-03 63 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的网站显示见解将以类似的方式工作。