为什么同步XMLHttpRequest被视为已弃用?

时间:2015-10-10 12:24:37

标签: javascript ajax xmlhttprequest less synchronous

我已经知道同步和异步请求之间的区别,例如: Synchronous and asynchronous requests

当您尝试创建同步XMLHttpRequest(例如firefox)时,您会收到这个着名的警告:

  

主线程上的同步XMLHttpRequest因不推荐使用   它对最终用户的不良影响

但是,我认为您可以以积极的方式使用同步方面,例如在页面加载期间,获取加载过程所依赖的一些重要数据(没有这些数据,内容可以& #39;根本不显示)。在那里,用户必须等待请求非常自然;它的行为就像请求的内容是调用文件的真实部分一样,必须与文件的其余部分一起阅读。

less.js css工具几乎就是这种情况:
它需要在任何显示之前解析.less文件。 less团队显然决定选择同步请求:我可以想象,使用异步请求,可以在解析较少的文件之前显示页面,并显示一些短时间内的原始内容,没有定义任何样式。这不是预期或方便的行为。所以同步请求似乎是一个更好的解决方案

警告说:

  

因为它对最终用户的体验产生了不利影响

显而易见,开发人员负责确保请求尽可能快地运行,但是在网站向其自己的服务器发送强制请求的情况下(对于php文件)这是网站的一部分),或者在less.js的情况下,同步行为是想要的行为。

那么,为什么同步请求被视为已弃用,而它们似乎非常有用?

1 个答案:

答案 0 :(得分:1)

你混合了不同的概念,这就是为什么你想知道它被弃用的原因。

首先,异步调用不是为了使调用更快而发明的。事实上,它们对速度的影响几乎为零。

其次,异步调用不是为了专门发出必需或不需要的调用而发明的。开发人员有责任做出这样的决定。

话虽如此,该消息清楚地回答了这个问题:

  

因为它对最终用户的体验产生了不利影响

您的主要困惑是关于异步调用的目标。异步调用背后的整个想法是 NOT ,以确保用户不必等待结果,但可以使应用程序更具响应性

您在页面加载期间给出了所需调用的示例。通过使用异步请求,用户仍然必须等待结果(异步调用的目标不是解决此问题),但应用程序将保持对用户输入的响应。例如,某些应用程序可以有[取消]按钮,以便用户可以取消该请求。某些其他应用程序可能会显示一些动画或进度条。您,开发人员,决定要做什么,但只有异步才能让您有机会做出决定。另一方面,同步调用将阻止执行,应用程序看起来像冻结,您,开发人员,在通话期间无法执行任何操作,这是 对最终用户体验的不利影响 消息正在谈论。