我不确定它在JavaScript中是否可行,所以我想我会问。 :)
假设我们有100个要求要完成并希望加快速度。
我在想的是:
考虑到浏览器JavaScript不支持线程,我们可以“利用”async
功能吗?
你认为它会起作用,或者在JavaScript中存在固有的问题吗?
答案 0 :(得分:3)
是的,我之前做过类似的事情。基本过程是:
答案 1 :(得分:2)
我会说,Dancrumb的评论是这个问题的“答案”,但不管怎样......
当前的浏览器会限制HTTP请求,因此您甚至可以轻松地立即启动所有100个请求,并且浏览器将尽可能快地发送这些请求,但仅限于相当数量的并行请求。
所以,立即启动它们并信任浏览器。
但是,这可能会在未来发生变化(随着最终用户互联网带宽的增加和技术的进步,浏览器发送的并行请求数量会增加。)
编辑:您还应该在javascript环境中思考和阅读“异步”的含义。异步这里只是意味着您放弃控制关于某事情系统的其他部分。所以“发送”异步请求只是意味着你告诉浏览器这样做!您无法控制浏览器,只需告诉发送该请求,并通知我结果。
答案 2 :(得分:0)
分解100个请求实际上要慢一点,并且在等待它们完成直到您发送下一批请求时,一次批量发送5个请求。你可能最好只发送100个请求,记住JavaScript是单线程的,所以它一次只能解决1个响应。
更好的方法是设置一个批处理请求服务,它接受如下内容:
/ajax_batch?req1=/some/request.json&req2=/other/request.json
等等。基本上,您在单个HTTP请求中发送多个请求。这样的请求的响应如下:
[
{"reqName":"req1","data":{}},
{"reqName":"req2","data":{}}
]
您的ajax_batch服务将解析每个请求并以正确的顺序发回结果。客户端,您可以跟踪发送的内容和期望的内容,以便将结果与正确的请求进行匹配。在下行方面,它需要相当多的编码。
速度增益完全来自HTTP请求的大量减少。 由于网址长度有限制,因此您发送的请求数量有限制。
DWR确实完成了这一点。