为什么异步XMLHttpRequest比同步请求更受欢迎?

3
异步和同步的区别是什么,这种区别对请求有何影响?

4
它对请求的影响并不是那么大,而是对浏览器产生了影响,从而影响了用户的体验。同步请求会导致浏览器在等待响应时更多地或者更少地“冻结”。 - Pointy
你能解释一下为什么你认为它们是“首选”吗?像每个工具一样,使用异步或同步请求有好时机和坏时机。 - Platinum Azure
@PlatinumAzure:不,他不能——否则他就不会问了 :-) - Bergi
@Pointy:也许吧,其实我也不知道,原因也是一样的。我并不是说那些警告也会出现在长时间同步调用中。但同步调用可能会产生与慢脚本相同的效果。有时候我表达得不太清楚 ;) - Felix Kling
1
这是一个有建设性的问题。我不同意那种有明确答案并且简明扼要的问题应该被关闭或标记为不适合的观点。它回答了我的问题,帮助我解决了问题,而不是需要我发表过于相似的问题。 - John
显示剩余2条评论
2个回答

5
从 Mozilla 的 同步和异步请求 文章中可以看出,XMLHttpRequest 支持同步和异步通信。然而,基于性能的考虑,异步请求应该优先于同步请求。
简而言之,同步请求会阻止代码的执行并可能导致内存泄漏和事件问题。这可能会引起严重的问题。仅有的使用同步请求的合理原因是更容易地在 Web Workers 中进行下载。
异步请求是 XMLHttpRequest 存在的主要原因。XMLHttpRequest 是 AJAX 的基础,其思想是让 JavaScript 代码运行并让用户在后台与服务器通信。例如 Gmail 就是这样加载电子邮件的。
同步请求会阻止脚本在传输完成前运行。简单来说,当异步请求可用时,没有理由这样做。如果你的 Gmail 经常冻结,那么这将非常烦人,你很少或者根本不需要使用同步请求。

有些情况下必须使用同步请求, 但在这些情况之外,你很可能没有理由进行同步请求,并且有充分的理由使用异步请求。


2
一个异步请求允许您的脚本在等待服务器的回复时继续运行并执行其他操作。
同步请求会阻塞脚本的执行,直到接收到回复。这意味着您的应用程序将无响应且不能执行其他任何操作。

在什么(显然罕见的)情况下,同步请求对开发人员更有用? - starcodex
1
当事情需要按顺序发生,或一个请求依赖于另一个请求的结果才能运行时。 - Mark Parnell
1
@Mark:即使如此,还有其他简单的方法来链接异步请求(关键词:Promise、队列)。 - Felix Kling
@nima- 同步的ajax可以构建真正的需求,而无需重写所有代码以使用异步技术。传统的表单提交实际上是同步的,适用于显示付款批准屏幕,而无需复杂的回调或多个HTTP事务。并不是说js代码不能异步运行,而是有些代码在编写时没有异步处理。这些代码可能比没有好,或者值得等待。 - dandavis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接