var url = 'reports?type=travel&sttime=22/01/2015&endtime=2/03/2015'
$.get(url).done(function(response){console.log(response);});
这是我在2015年1月22日至2015年3月2日期间获取报告数据的代码。
因为时间跨度是40天而且响应将包含大量数据..并且获取数据需要1分钟以上。
现在我的问题是,我正在潜水40/10 = 4的日期 即2月22日至2月1日,2月2日至2月11日,2月12日至2月21日,2月21日至3月2日
我根据日期分区创建了四个URL。 有没有办法做多线程来实现所有的网址 一次获取数据并获取响应...以减少浏览器中的显示时间。
答案 0 :(得分:1)
没关系。这里的瓶颈可能不是I / O,而是网络速度。如果您的客户端网络只能将N kB / s从您的服务器传输到他的计算机,那么打开2个或4个或10个并发连接并不重要。
更好的解决方案是对数据进行分页,仅获取客户端当前所需的部分。我怀疑任何用户都可以阅读大约两个月的大量数据。只获取客户可能感兴趣的部分,也可以下载第2页和第3页,然后在后台下载其余部分。
答案 1 :(得分:0)
不,没有。 JavaScript不支持多线程,因为浏览器本身的JavaScript解释器是单线程的。
答案 2 :(得分: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);
// ...
});
答案 3 :(得分:0)
我建议你使用HTML5 Web Workers。
http://www.w3schools.com/html/html5_webworkers.asp
这是适用于这些类型应用程序的唯一方法,但遗憾的是并非所有浏览器都支持它们。因此,您应该密切关注您想要建议的浏览器和版本。
另外,为了改善用户界面,您可以在客户端使用离线存储。
http://www.w3schools.com/html/html5_webstorage.asp
示例:我有一个介于1月20日至20日之间的数据。因此,当第一次用户加载网站时,我会获取所有数据并将其存储在客户端。现在,当用户在22日开始网站时,这次我将会只获取20日至22日之间的数据并再次将其存储在客户端。所以这只需要第一次,从第二次开始,它会改善用户交互,并且效率更高。大多数基于html5的现代网站都显示了见解将以类似的方式工作。