【问题标题】:WHY is synchronous XMLHttpRequest considered as deprecated? [closed]为什么同步 XMLHttpRequest 被视为已弃用? [关闭]
【发布时间】:2015-10-10 20:53:18
【问题描述】:

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

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

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

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

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

警告说:

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

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

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

【问题讨论】:

  • 您收到的错误消息中没有回答您的问题吗?你可能同意也可能不同意,但这仍然是原因......
  • @PeeHaa : 抱歉,没有 : 没有理由警告使用 有用 功能,请再次阅读我的帖子
  • @PeeHaa:你读过整个问题吗?
  • 是的,我做到了。它列出了一些可能有用也可能没有用的功能的情况。并询问为什么它被弃用。答案在所述的错误消息中。
  • @PeeHaa :在某些情况下(如上所述),声明的内容是错误的,然后在控制台日志中没有位置

标签: javascript ajax xmlhttprequest less synchronous


【解决方案1】:

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

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

其次,异步调用并不是为了专门进行必需或非必需调用而发明的。做出这样的决定是开发者的责任。

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

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

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

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

【讨论】:

  • 基本上,这是加载时出现空白屏幕和漂亮的“正在加载...”启动画面之间的区别。就我个人而言,我会选择空白屏幕并专注于让它变得非常快,但这只是我 XD
  • Tx 的答案,但我还是有点怀疑:less 的例子呢?没有同步请求怎么办?
  • @NiettheDarkAbsol 这只是一种选择。再次阅读我的答案。基本上,它让您有机会做出决定,而且可能性远不止是启动屏幕与空白屏幕。此外,“专注于让它变得非常快”通常不受您的控制。
  • 我不想猜测less 团队所做的设计决策。他们有一定的目标和问题,并决定采取一种或另一种方式,他们可能会在未来的版本中改变他们的设计。但如果你愿意,我可以告诉你我的经历。去年,我正在重写一个需要许多“同步”HTTPS 请求的应用程序。但我知道我没有这样的选择,所以我不得不重新设计整个应用程序架构以使用异步 HTTPS 请求。我花了更长的时间,但用户喜欢新版本,我为结果感到自豪。
猜你喜欢
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多