Javascript 为什么同步XMLHttpRequest被认为是不推荐的?

Javascript 为什么同步XMLHttpRequest被认为是不推荐的?,javascript,ajax,xmlhttprequest,less,synchronous,Javascript,Ajax,Xmlhttprequest,Less,Synchronous,我已经知道了同步请求和异步请求之间的区别,例如这里解释的: 当您尝试创建同步XMLHttpRequest(例如使用firefox)时,您会得到以下著名警告: 主线程上的同步XMLHttpRequest已被弃用,因为 它对最终用户体验的有害影响 但是,我认为您可以以一种积极的方式使用同步方面,例如在页面加载期间,获取一些加载过程几乎不依赖的重要数据(没有这些数据,内容根本无法显示)。在那里,用户必须等待请求是很自然的;它的行为就像请求的内容是调用文件的真实部分一样,调用文件必须与文件的其余部分一

我已经知道了同步请求和异步请求之间的区别,例如这里解释的:

当您尝试创建同步XMLHttpRequest(例如使用
firefox
)时,您会得到以下著名警告:

主线程上的同步XMLHttpRequest已被弃用,因为 它对最终用户体验的有害影响

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

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

警告说:

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

显然,开发人员有责任确保请求尽可能快地运行,但如果网站向其自己的服务器(向网站的一部分php文件)发送强制请求,或者在
less.js
的情况下,同步行为是需要的


那么,为什么同步请求被认为是不推荐的,而它们似乎非常有用呢?

您混合了不同的概念,这就是为什么您想知道它为什么被不推荐的原因

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

其次,异步调用并不是专门用来进行必需或非必需调用的。开发商有责任做出这样的决定

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

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

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


您给出了页面加载期间所需调用的示例。通过使用异步请求,用户仍然需要等待结果(异步调用的目标不是解决这个问题),但应用程序将保持对用户输入的响应。例如,一些应用程序可以有一个[取消]按钮,以便用户可以取消请求。其他一些应用程序可能会显示一些动画或进度条。作为开发人员,您可以决定要做什么,但只有异步才能让您有机会做出决定。另一方面,同步调用会阻止执行,应用程序看起来像被冻结了一样,开发人员在调用期间不能做任何事情,这就是消息所说的对最终用户体验的有害影响。
您收到的错误消息中不是已经回答了您的问题吗?你可能同意也可能不同意,但这仍然是原因…@PeeHaa:对不起,不:没有理由警告使用有用的功能,请阅读我的帖子again@PeeHaa当前位置你看完整个问题了吗?是的,我看完了。它列出了一些可能有用或不有用的情况。并询问为什么它会被弃用。答案在错误消息中,如前所述。@PeeHaa:在某些情况下(如上所述),所述内容是错误的,然后在控制台日志中没有位置基本上,这是加载时有一个空白屏幕和有一个漂亮的“加载…”屏幕之间的区别。就我个人而言,我会选择空白屏幕,并专注于让它快速流血,但这只是我的XDTX的答案,但我仍然有点怀疑:什么关于<代码>更少< /代码>示例?没有同步请求他们怎么办?@NiettheDarkAbsol这是唯一的选择。再读一遍我的答案。基本上,它给了你做出决定的机会,而且可能性远不止是一个闪屏和一个空白屏。另外,“专注于让它变得非常快”通常不在你的控制之下。我不想猜测
less
团队做出的设计决策。他们有特定的目标和问题,并决定采取这样或那样的方式,他们可能会在未来的版本中更改他们的设计。但如果你愿意,我可以告诉你我的经历。去年,我重新编写了一个需要许多“同步”HTTPS请求的应用程序。但我知道我没有这样的选择,所以我必须重新设计整个应用程序架构,以使用异步HTTPS请求。这花了我更长的时间,但用户喜欢这个新版本,我为结果感到自豪。